[英]Qt - does a QTimer::timeout() signal result in a QEvent?
Qt doc在哪里说明呢?
无处,因为它对QTimer
的用户无关紧要。 timer事件是实现细节。 它是传递给计时器对象本身的,因此您确实必须竭尽全力来拦截它。 QTimer
工作方式如下:
class QTimer : public QObject {
Q_TIMER
QBasicTimer m_timer;
protected:
void timerEvent(QTimerEvent * ev) override {
if (ev->timerId() == m_timer.timerId())
emit timeout();
}
/*...*/
};
如果您考虑一下,在不运行发出信号的代码的情况下就无法发出任何信号,并且安全地运行此类异步发出代码的唯一方法是为完成控制的代码块编写代码,这些代码将控制权交给了每个机会都有事件循环。 平台会通知事件循环定时器超时,然后立即发出信号。 如果Qt从诸如Unix信号之类的侵入性异步回调发出诸如定时器超时之类的信号,您将陷入深深的麻烦:只需了解一下在信号处理程序中可以执行的操作-它与中断处理程序没有什么不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.