我正在处理一个扩展的著名生产者-消费者线程问题(作为家庭作业)。我有一个共享队列作为“我的缓冲区”,生产者需要每秒产生一个“元素”。
我正在使用(我的第一次......)QT,我想要一个计时器,以便生产者每秒都会生成元素。
我不明白 QTimer 库...有人可以告诉我我必须为计时器使用哪些库/函数吗?只是 QTimer 似乎是用于 GUI...如果 Qtimer 是我必须使用的,那么如何使用?
也许这是一个愚蠢的问题,但是这件小事占用了我太多时间……而且我找不到答案。
我正在处理一个扩展的著名生产者-消费者线程问题(作为家庭作业)。我有一个共享队列作为“我的缓冲区”,生产者需要每秒产生一个“元素”。
我正在使用(我的第一次......)QT,我想要一个计时器,以便生产者每秒都会生成元素。
我不明白 QTimer 库...有人可以告诉我我必须为计时器使用哪些库/函数吗?只是 QTimer 似乎是用于 GUI...如果 Qtimer 是我必须使用的,那么如何使用?
也许这是一个愚蠢的问题,但是这件小事占用了我太多时间……而且我找不到答案。
您只需要使用 Qtimer 每秒发出一个信号。然后将一个插槽连接到该信号,您可以在其中启动一个线程,但您必须跨线程管理共享资源(“我的缓冲区”)。
QTimer timer=new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(On_Timeout));
timer->start(1000);
其中 On_Timeout 每秒执行一次。
这是Qtimer的一些基本教程。 http://www.youtube.com/watch?v=pHc7siV2Ads
您只需要确保 QEventLoop 在每个需要工作的线程中运行(使用 QObject 的)。
您将拥有一个运行QApplication.exec()
.
然后你创建另一个线程(做并行工作)你在那个运行的线程中有 QEventLoop。你通常会确保 QObject(在这个额外的线程中工作)有这个额外的线程作为他们的“亲和线程”。如果您从额外线程中创建和设置 QObject,则新 QObject 的关联线程将是当前线程。
除此之外,您使用 QueuedConnection 在线程之间传递信号/插槽。
我敢肯定,如果您搜索,周围有很多示例 QTimer 代码博客条目。