首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTimer机制

QTimer机制
EN

Stack Overflow用户
提问于 2014-05-20 03:35:11
回答 2查看 308关注 0票数 0

假设timerQTimer的一个对象,计时器的间隔是iInterval,计时器的超时信号连接到时隙sltTimeout()

我只是在想,如果iInterval小于运行sltTimeout()所需的时间,会发生什么情况。结果多个线程会运行sltTimeout()吗?如果是这样的话,这似乎会导致不同步访问对象的问题。

有人能澄清吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-20 03:39:06

QTimer运行在启动它的线程上。因为它只在一个线程上运行,所以它不可能在前一个插槽函数返回之前多次发出它的timeout()信号。

来自QTimer文档

Qt使用计时器的线程关联来确定哪个线程将发出timeout()信号。

票数 6
EN

Stack Overflow用户

发布于 2014-05-20 04:13:42

结果多个线程会运行sltTimeout()吗?

它不会自动运行,所以,不。如果需要的话,您需要确保这样做,例如,如果它正在做一些计算。

如果是这样的话,这似乎会导致不同步访问对象的问题。

是也不是。

在这种情况下,它没有什么特别之处,只是一般的线程编程。您需要使用线程同步原语,如QMutex、QMutexLocker、QSemaphore等。

您可以做的另一个技巧是,在处理时隙时停止计时器调用,但这样做会带来您可能不希望采取的折衷方案。

不要忘记默认情况下事件将排队,因此如果您在下一次运行中不依赖于您的sltTimeout的前一次运行,您甚至可以忽略线程“如果您有足够的时间”来完成它。如果后续调用之间存在依赖关系,那么是的,您需要在代码中变得聪明。

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

https://stackoverflow.com/questions/23750615

复制
相关文章

相似问题

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