目的:了解QThread的wait 和 wakeAll信号机制
代码位置:
#include <QtCore>
#include <stdio.h>
#include <stdlib.h>
//设置数据数量
const int DataSize = 100000;
//设置缓存数量
const int BufferSize = 8192;
char buffer[BufferSize];
QWaitCondition bufferNotEmpty;//等待条件:缓存不为空
QWaitCondition bufferNotFull;//等待条件:缓存未满
QMutex mutex;
int numUsedBytes = 0;
class Producer : public QThread
{
public:
Producer(QObject *parent = NULL) : QThread(parent)
{
}
void run() override
{
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
for (int i = 0; i < DataSize; ++i) {
/* 互斥锁:保护一个对象,数据结构或者一段代码只能在一条线程访问*/
mutex.lock();
//如果缓存区是满的,则阻塞当前线程,等待消费者线程读取
if (numUsedBytes == BufferSize)
bufferNotFull.wait(&mutex);
mutex.unlock();//解锁
fprintf(stderr,