Qt同步屏障
Qt synchronization barrier?
是否存在与同步屏障等效的Qt?wait
块的第一个N-1个呼叫者和wait
的第N个呼叫器导致它们全部释放的类型。
没有,但您可以使用QWaitCondition
来制作这些屏障:
#include <QMutex>
#include <QWaitCondition>
#include <QSharedPointer>
// Data "pimpl" class (not to be used directly)
class BarrierData
{
public:
BarrierData(int count) : count(count) {}
void wait() {
mutex.lock();
--count;
if (count > 0)
condition.wait(&mutex);
else
condition.wakeAll();
mutex.unlock();
}
private:
Q_DISABLE_COPY(BarrierData)
int count;
QMutex mutex;
QWaitCondition condition;
};
class Barrier {
public:
// Create a barrier that will wait for count threads
Barrier(int count) : d(new BarrierData(count)) {}
void wait() {
d->wait();
}
private:
QSharedPointer<BarrierData> d;
};
使用示例代码:
class MyThread : public QThread {
public:
MyThread(Barrier barrier, QObject *parent = 0)
: QThread(parent), barrier(barrier) {}
void run() {
qDebug() << "thread blocked";
barrier.wait();
qDebug() << "thread released";
}
private:
Barrier barrier;
};
int main(int argc, char *argv[])
{
...
Barrier barrier(5);
for(int i=0; i < 5; ++i) {
MyThread * thread = new MyThread(barrier);
thread->start();
}
...
}
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何在QT中同步发送http请求
- 同步QT中两种方法的螺纹执行
- Qt的事件循环线程是安全的还是原子的?处理"队列连接"时如何同步?
- 使用 qt 和 opengl、定时精度和垂直同步问题、c++ 显示图像
- qt 中的线程同步
- Qt 中两个线程之间的事件同步
- Qt线程同步设计
- Qt QState机器同步问题:初始状态未在启动信号上设置
- Qt同步原语可以与非QThread线程一起使用吗
- Qt同步屏障
- Qt中不同线程中的对象同步
- Qt:如何同步访问数据从多个线程在模型/视图设置
- 使用Qt同步信号
- 同步文件与sqlite数据库qt c++
- Qt:在同步UDP套接字中是否需要waitForReadyRead/waitForBytesWritten
- Qt - 同步线程不起作用 - 线程停止但实际上不会停止,有时在不应该停止的时候停止