Qt实现环形缓冲区

首先认识一个类QSemaphore 

     QSemaphore  他提供了一个通用的计数信号量,信号量是互斥量的泛化。虽然互斥锁只能被锁定一次,但是可以获得一个信号量多次。信号量通常用于保护一定数量的相同资源。信号量支持两个基本操作,acquire()和release():

acquire(n) 获取n个资源。如果没有那么多可用资源,调用将阻塞;

release(n)释放n个资源。

实现方式:

 

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
QSemaphore freeBytes(100); //初始化缓冲区大小  缓冲器的未用量
QSemaphore usedBytes(0);   //缓冲区的已用量
QQueue timeQueue;  //缓冲区
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(Write()));
    timer->start(1000);
    star();
}

Widget::~Widget()
{
    delete ui;
}
void Widget::star()
{
    //创建多线程
     QtConcurrent::run(this,&Widget::m_threadSlot);
}

void Widget::m_threadSlot()
{
    while(true)
    {
    usedBytes.acquire();//已用信号量减一
    qDebug()<

 

 

     

你可能感兴趣的:(Qt)