首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟QTimer启动?

延迟QTimer启动?
EN

Stack Overflow用户
提问于 2011-10-31 17:43:24
回答 2查看 1.5K关注 0票数 0

今天早上我很难把头绕着Qtimer。

以下是基本想法:

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

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

这是我的问题:我想给work()打几次电话,一次接一次。我的问题是,目前,它将在完成处理之前多次调用work()函数,由于它与硬件接口,因此无法工作。

我该怎么做才好呢?

编辑:

以下是程序的基本流程:

  • 用户单击startTimer()。
  • StartTime()调用timer->start()
  • 当计时器发出信号时,它调用Start()
  • Start()做一些简单的UI操作,然后让...work=QtConcurrent::run(...work().) //work需要很长的时间观察->setFuture(*未来)
  • 不知何故(这是我的问题),当工作()完成后,我想再次调用它(确切地说,是4次)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-31 17:56:08

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

使用位于QMutexLocker函数顶部的work(),并将相应的QMutex添加到类定义中。

THis方式work()函数的执行将被阻塞,直到上次执行完成为止。

票数 2
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7957467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档