我有圖形用戶界面創建的線程&管理圖形用戶界面內容。現在當應用程序空閒時,即所有線程都空閒(或者即使只有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. 如何在其成員發出信號時發出信號?
- 3. QVector發生變化時發出信號
- 4. AutoResetEvent發出信號之前觸發
- 5. 你可以從信號處理程序中調用signal()嗎?
- 6. 從ObServer發出的選擇性D-BUS信號(單播信號)
- 7. 使用觀察者發出信號燈信號?
- 8. 創建併發出GTK信號
- 9. QMdiArea不會發出customContextMenuRequested信號
- 10. Chaco和PyQt發出信號失敗
- 11. 未收到Qt發出的信號
- 12. pyqt4發出信號不起作用
- 13. QQmlApplicationEngine不發出警告信號
- 14. QNetworkAccessManager永遠不會發出finished()信號
- 15. QTcpSocket不會發出錯誤信號
- 16. 避免QTimer發出超時信號
- 17. 從線程發送信號時出錯
- 18. QT - 懸停QLabel時發出信號
- 19. 抑制信號並在稍後發出
- 20. qt按鈕發出多個信號
- 21. 如何從非PyQt類發出信號?
- 22. 我可以從python發出信號嗎?
- 23. 觸發信號流
- 24. 信號輸出arduino
- 25. DBus Glib發送信號 - 沒有信號被髮射
- 26. Python應用程序在從回調信號中發出信號時崩潰
- 27. 從QRunnable發出信號或發佈事件
- 28. QRunnable發出信號並從插槽獲取發件人
- 29. Django 1.3,如何在ebay上發佈帖子時發出信號?
- 30. 向量push_back在while和for循環中返回SIGABRT信號(signal 6)(C++)
看到這個答案 - http://stackoverflow.com/a/6534069/667266 – borisbn 2013-02-15 11:56:36