簡體   English   中英

Qt-QTimer :: timeout()信號會導致QEvent嗎?

[英]Qt - does a QTimer::timeout() signal result in a QEvent?

Qt doc:

如果沒有運行任何事件循環,則事件將不會傳遞到該對象。 例如,如果您在線程中創建QTimer對象,但是從不調用exec(),則QTimer將永遠不會發出其timeout()信號。 調用deleteLater()也不起作用。 (這些限制也適用於主線程。)

這是否意味着信號void QTimer::timeout()也將發出QEvent
如果是這樣,那么Qt文檔在哪里說明呢?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM