我有圖形用戶界面創建的線程&管理圖形用戶界面內容。現在當應用程序空閒時,即所有線程都空閒(或者即使只有GUI線程空閒),那麼我希望我的繼承類的對象發出SIGNAL
。因此,無論何時應用程序閒置,我都會默默創建下一階段所需的Widgets
。所以我想知道如何讓這個對象發出一個SIGNAL
只要GUI線程空閒?我的應用程序是多線程 &有多個類別,因此SIGNAL
不是必須僅在類別GUI中發出。 一旦線程變爲空閒狀態,不應該立即釋放SIGNAL
。我希望線程應該閒置足夠的時間,以便我確信用戶實際上是空閒的。 謝謝!發出SIGNAL信號?
7
A
回答
11
QAbstractEventDispatcher允許將自己的事件插入Qt's event loop。它也允許監視事件循環的工作量。
這裏是一個例子。該小部件正在偵聽QAbstractEventDispatcher :: awake()和QAbstractEventDispatcher :: aboutToBlock()信號以瞭解事件循環何時繁忙。
#include <QtGui>
class IdleAwareWidget : public QWidget
{
Q_OBJECT
public:
IdleAwareWidget(QWidget *parent = 0) : QWidget(parent) {
dispatcher = QAbstractEventDispatcher::instance();
connect(dispatcher, SIGNAL(awake()), SLOT(awake()));
connect(dispatcher, SIGNAL(aboutToBlock()), SLOT(aboutToBlock()));
}
private slots:
void awake() {
lastAwake = QTime::currentTime();
qDebug() << "Slept for " << lastBlock.msecsTo(lastAwake) << " msec";
}
void aboutToBlock() {
lastBlock = QTime::currentTime();
qDebug() << "Worked for " << lastAwake.msecsTo(lastBlock) << " msec";
}
private:
QAbstractEventDispatcher *dispatcher;
QTime lastAwake;
QTime lastBlock;
};
main.cpp中:
#include <QtGui>
#include "idle_widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
IdleWidget widget;
widget.show();
return a.exec();
}
如果問題是隻是空閒處理,然後用0間隔QTimer是一個選項:
QTimer::singleShot(0, this, SLOT(doWorkInIdle()));
這將預定來電doWorkInIdle()
槽只要事件循環進入空閒狀態。將工作分解爲小卡盤不會阻止循環,應用程序將保持響應。
+0
謝謝你的答覆! – 2013-02-17 11:35:00
相關問題
- 1. C信號。 signal()vs sigset()?
- 2. AutoResetEvent發出信號之前觸發
- 3. pyqt4發出信號不起作用
- 4. QNetworkAccessManager永遠不會發出finished()信號
- 5. 從線程發送信號時出錯
- 6. 未收到Qt發出的信號
- 7. QT - 懸停QLabel時發出信號
- 8. qt按鈕發出多個信號
- 9. 創建併發出GTK信號
- 10. 觸發信號流
- 11. DBus Glib發送信號 - 沒有信號被髮射
- 12. Python應用程序在從回調信號中發出信號時崩潰
- 13. 從QRunnable發出信號或發佈事件
- 14. QRunnable發出信號並從插槽獲取發件人
- 15. 在Python中發出的信號導致退出代碼139
- 16. 哪個線程是調用的信號處理程序(例如signal(SIGINT,crtl_c);)?
- 17. 向量push_back在while和for循環中返回SIGABRT信號(signal 6)(C++)
- 18. 發送信號給線程
- 19. 發送控制信號?
- 20. DAC信號發生器stm32
- 21. QToolButton和發射信號
- 22. 從JVM發送POSIX信號
- 23. 第一信號發射
- 24. 如何發送信號?
- 25. 發送iOS遊戲信號
- 26. QTableWidget。發射cellChanged信號
- 27. 信號發射結構
- 28. pthread_kill()不發送信號到
- 29. 發送信號到進程
- 30. C pthreads和信號發送
看到這個答案 - http://stackoverflow.com/a/6534069/667266 – borisbn 2013-02-15 11:56:36