Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用QTtimer调度线程?_Multithreading_Qt_Time_Thread Safety - Fatal编程技术网

Multithreading 使用QTtimer调度线程?

Multithreading 使用QTtimer调度线程?,multithreading,qt,time,thread-safety,Multithreading,Qt,Time,Thread Safety,我正在处理一个扩展的著名生产商-消费者线程问题(作为家庭作业)。我有一个共享队列作为“我的缓冲区”,生产者需要每秒生成一个“元素” 我正在使用(我的第一次…)QT,我想要一个计时器,以便制作人每秒钟生成一个元素 我不明白QTimer图书馆。。。有人能告诉我定时器必须使用哪些库/函数吗?只是QTimer似乎是为GUI设计的。。。如果Qtimer是我必须使用的,那么如何使用 也许这是个愚蠢的问题,但这件小事花了我太多时间。。。我找不到答案 您只需要确保QEventLoop在每个需要执行工作的线程中运

我正在处理一个扩展的著名生产商-消费者线程问题(作为家庭作业)。我有一个共享队列作为“我的缓冲区”,生产者需要每秒生成一个“元素”

我正在使用(我的第一次…)QT,我想要一个计时器,以便制作人每秒钟生成一个元素

我不明白QTimer图书馆。。。有人能告诉我定时器必须使用哪些库/函数吗?只是QTimer似乎是为GUI设计的。。。如果Qtimer是我必须使用的,那么如何使用


也许这是个愚蠢的问题,但这件小事花了我太多时间。。。我找不到答案

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

您已经有了一个运行
QApplication.exec()
的主事件循环(“GUI线程”)

然后创建另一个线程(执行并行工作),在该线程中运行QEventLoop。您通常会确保QObject(在这个额外线程中工作)将这个额外线程作为其“关联线程”。如果从额外线程中创建并安装QObject,则新QObject的关联线程将是当前线程

除此之外,还可以使用QueuedConnection在线程之间传递信号/插槽


我敢肯定,如果您进行搜索,会有大量的示例QTimer代码博客条目。

您只需确保每个需要执行工作的线程(使用QObject)中都运行QEventLoop即可

您已经有了一个运行
QApplication.exec()
的主事件循环(“GUI线程”)

然后创建另一个线程(执行并行工作),在该线程中运行QEventLoop。您通常会确保QObject(在这个额外线程中工作)将这个额外线程作为其“关联线程”。如果从额外线程中创建并安装QObject,则新QObject的关联线程将是当前线程

除此之外,还可以使用QueuedConnection在线程之间传递信号/插槽


我敢肯定,如果您进行搜索,会有很多QTimer代码示例博客条目。

您只需要使用QTimer每秒发出一个信号。然后将一个插槽连接到该信号,您可以启动一个线程,但您必须跨线程管理共享资源(“我的缓冲区”)

QTimer timer=newqtimer();
连接(计时器,信号(timeout()),此,插槽(On_timeout))
定时器->启动(1000)

其中On_超时每秒钟执行一次

下面是一些关于Qtimer的基本教程。

您只需使用Qtimer每秒发出一个信号。然后将一个插槽连接到该信号,您可以启动一个线程,但您必须跨线程管理共享资源(“我的缓冲区”)

QTimer timer=newqtimer();
连接(计时器,信号(timeout()),此,插槽(On_timeout))
定时器->启动(1000)

其中On_超时每秒钟执行一次

下面是一些关于Qtimer的基本教程。

如果制作程序中没有事件循环,为什么不使用Sleep()循环?如果制作程序中没有事件循环,为什么不使用Sleep()循环?