今天早上在Qtimer周围缠头时遇到了一些麻烦。
这是基本想法:
我有一个通过单击按钮启动的QTimer。 一旦它处于活动状态,它每5分钟调用一个函数(让我们称之为start())。
Start()使用QtConcurrent调用单独的函数(称之为work())。因此,即使处理仍在进行,它也会快速返回。
这是我的问题: 我想多次调用work(),一次又一次。我的问题是,目前它会在完成处理之前多次调用work()函数,因为它与硬件接口不起作用。
我该如何正确地解决这个问题?
编辑:
以下是该计划的基本流程:
答案 0 :(得分:2)
如果我正确理解您的问题,您希望避免同时在多个线程中运行work()
函数。
使用work()
功能顶部的QMutexLocker,并将相应的QMutex添加到您的班级定义中。
这样,work()
函数的执行将被阻止,直到上一次执行完成。
答案 1 :(得分:0)
如果您的work()
函数因某种原因出现异常需要20分钟,那么您是否希望尽快运行4个work()
回调...或者仍然希望它们尽管有延误,但间隔5分钟?
如果您想要的是5分钟间隔,那么您应该使用每次完成工作项时重新排队的单次计时器。通过这种方式,您可能无法使用大量阻塞的QTimer消息队列,这些消息可以一次性进入并运行: