今天早上我很难把头绕着Qtimer。
以下是基本想法:
我有一个QTimer,它是通过单击一个按钮启动的。一旦它处于活动状态,它每5分钟就调用一个函数(让我们将它称为start() )。
Start()使用QtConcurrent调用单独的函数(称为work() )。因此,即使仍在进行处理,它也会很快返回。
这是我的问题:我想给work()打几次电话,一次接一次。我的问题是,目前,它将在完成处理之前多次调用work()函数,由于它与硬件接口,因此无法工作。
我该怎么做才好呢?
编辑:
以下是程序的基本流程:
发布于 2011-10-31 17:56:08
如果我正确理解了您的问题,您希望避免在多个线程中同时运行work()函数。
使用位于QMutexLocker函数顶部的work(),并将相应的QMutex添加到类定义中。
THis方式work()函数的执行将被阻塞,直到上次执行完成为止。
发布于 2011-10-31 18:54:39
如果您的work()函数由于某种原因花费了20分钟的异常时间,那么如果possible...or仍然希望它们在延迟的情况下间隔5分钟,那么您想要运行4个下一个work()回调吗?
如果您想要的是真正的5分钟间隔,那么您应该使用一个单次定时器,它是在每次完成工作项时重新排队的。这样,您就没有可能用一个大的被阻塞的QTimer消息队列来结束它,这些队列可以一次淹没并全部运行:
http://doc.qt.io/qt-4.8/qtimer.html#singleShot-prop
https://stackoverflow.com/questions/7957467
复制相似问题