使用QTtimer调度线程?

时间:2012-09-24 01:33:17

标签: multithreading qt time thread-safety

我正在使用线程(用于作业)扩展着名的生产者 - 消费者问题。我有一个共享队列作为“我的缓冲区”,生产者需要每秒产生一个“元素”。

我正在使用(我第一次......)QT,我想要一个计时器,以便生产者每一秒都会生成元素。

我不懂QTimer库...有人可以给我一个建议,我必须使用哪些库/函数用于计时器?只是QTimer似乎是用于GUI ...如果Qtimer是我必须使用的,那么如何?

也许这是一个愚蠢的问题,但这件小事让我花了太多时间......而且我找不到一个aswer。

2 个答案:

答案 0 :(得分:0)

您只需要确保QEventLoop在每个需要工作的线程中运行(使用QObject)。

您将拥有一个运行QApplication.exec()的主事件循环(“GUI线程”)。

然后你创建另一个线程(做并行工作)你在运行的那个线程中有QEventLoop。你通常会确保QObject(在这个额外的线程中有效)将这个额外的线程作为它们的“亲和线程”。如果从额外线程中创建并设置QObject,则新QObject的关联线程将成为当前线程。

除此之外,您使用QueuedConnection在线程之间传递信号/插槽。

如果您搜索,我确信有很多示例QTimer代码博客条目。

答案 1 :(得分:0)

你只需要每秒使用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