Qt QSemaphore

#include <QtCore>
#include <stdio.h>
#include <stdlib.h>
#include <QDebug>
const int DataSize = 10;
const int BufferSize =5;
char buffer[BufferSize];
QSemaphore freeBytes(BufferSize);
QSemaphore usedBytes;

class Producer:public QThread
{
public:
    void run()
    {
        qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
        for(int i =0;i<DataSize;i++)
        {
            sleep(5);
            freeBytes.acquire();
            buffer[i%BufferSize] = "ACGT"[(int)qrand()%4];
            qDebug()<<QString("producer:%1").arg(buffer[i%BufferSize]);
            usedBytes.release();
        }
    }
};

class Consumer:public QThread
{
public:
    void run()
    {
        for(int i=0;i<DataSize;i++)
        {
            usedBytes.acquire();
            qDebug()<<QString("Consumer:%1").arg(buffer[i%BufferSize]);
            freeBytes.release();
        }
    }
};

int main(int argc, char* argv[])
{
    QCoreApplication app(argc, argv);
    Producer producer;
    Consumer consumer;
    producer.start();
    consumer.start();
    producer.wait();
    consumer.wait();
    return app.exec();
}

猜你喜欢

转载自blog.csdn.net/qq_24127015/article/details/84285412
QT
今日推荐