你好,我对 QTimer 的几个问题很感兴趣。据我了解,它不在文档中:
1)假设有一个代码:
{
QTimer::singleShot(5000, this, [this](){ std::cout<<"hello world\n"; });
/*...какие-то долгие вычисления...*/
}
计时器何时启动:在调用 singleShot 的行中立即启动,还是在退出范围后(即经过长时间计算后)?
2) 启动后 5 秒后,是否将回调添加到事件处理程序队列?那些。如果已经有 1 个正在运行的回调,队列中有 2 个在它后面,那么我们来自计时器的回调将已经是 4,或者在第一个回调被调用之后立即,即 超越下一个 2?
当计时器超时时,它不会调用回调,它会发出 (
emit
)信号。该信号由 Qt 的元对象系统处理,该系统获取与其连接的所有槽的列表,并将它们放入相应线程的事件循环中。该函数将在队列到达时立即执行。也就是说,是的,如果有一个已经在工作的插槽,那么另一个将排队等候。但是如果插槽位于不同的线程中,那么它们可以同时执行。该顺序由操作系统的任务调度程序确定。并且定时器会在调用后立即启动
singleShot
。