我有一個被稱爲myObject的QObject的子類,它有一個QTimer數據成員在構造函數的堆中分配。 myObject還有一個連接到構造函數中的QTimer timeout()信號的插槽。我將myObject的指針稱爲myObject_ptr。QTimer超時信號不在不同線程上運行時調用槽
我想在與主線程不同的線程上運行myObject。遵循相對較新的建議,我不會繼承QThread。在主線程,我使用myObject的如下:
QThread *thread = new QThread(this);
myObject_ptr->moveToThread(thread);
connect(myObject_ptr, SIGNAL(destroyed(), thread, SLOT(quit())); //thread not needed if no object
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); //to avoid memory leak
connect(thread, SIGNAL(terminated()), thread, SLOT(deleteLater())); //to avoid memory leak
thread->start();
主線程調用myObject_ptr的函數這又啓動QTimer數據成員。當它超時時,什麼也沒有發生,但我期望調用定時器的timeout()信號所連接的myObject槽。問題是什麼?你如何做這項工作。如果myObject在創建它的同一個線程(即主線程)上運行,它將完美地工作。
從我所做的所有閱讀中,我認爲我創建的新線程可能不會處理事件,因爲它沒有自己的事件循環。我還閱讀了與之相反的文檔/文章,說當線程啓動時,run()函數調用exec()並且你有一個事件循環。
有人可以幫我嗎?
我可能會讓它工作正常,如果我繼承QThread,但基於目前的建議,我寧願避免這樣做。
預先感謝您。
我幾乎和你一樣的代碼,但這並沒有解決我的問題。 –