延迟QTimer启动?

时间:2011-10-31 17:43:25

标签: qt qt4

今天早上在Qtimer周围缠头时遇到了一些麻烦。

这是基本想法:

我有一个通过单击按钮启动的QTimer。 一旦它处于活动状态,它每5分钟调用一个函数(让我们称之为start())。

Start()使用QtConcurrent调用单独的函数(称之为work())。因此,即使处理仍在进行,它也会快速返回。

这是我的问题: 我想多次调用work(),一次又一次。我的问题是,目前它会在完成处理之前多次调用work()函数,因为它与硬件接口不起作用。

我该如何正确地解决这个问题?

编辑:

以下是该计划的基本流程:

  • 用户点击startTimer()。
  • StartTime()调用timer-> start()
  • 当计时器发出信号时,它会调用Start()
  • Start()做了一些轻量级的UI,然后做了    future = QtConcurrent :: run(... work()...)//工作需要很长时间    watcher-> setFuture(*未来)
  • 以某种方式(这是我的问题),当work()完成后,我想再次调用它(4次,确切地说)

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望避免同时在多个线程中运行work()函数。

使用work()功能顶部的QMutexLocker,并将相应的QMutex添加到您的班级定义中。

这样,work()函数的执行将被阻止,直到上一次执行完成。

答案 1 :(得分:0)

如果您的work()函数因某种原因出现异常需要20分钟,那么您是否希望尽快运行4个work()回调...或者仍然希望它们尽管有延误,但间隔5分钟?

如果您想要的是5分钟间隔,那么您应该使用每次完成工作项时重新排队的单次计时器。通过这种方式,您可能无法使用大量阻塞的QTimer消息队列,这些消息可以一次性进入并运行:

http://doc.qt.io/qt-4.8/qtimer.html#singleShot-prop