Qt 所有權問題導致多執行緒報錯

2021-08-01 15:26:55 字數 541 閱讀 3631

問題描述,把定時器放在單獨執行緒中使用,想提高精度。

結果報錯:

qobject::starttimer: timers cannot be started from another thread。

這種報錯方式,以前剛用多執行緒時候遇見過。知道原因,所以更疑惑,百思不得其解。

在q群問,集思廣益。

1.  多執行緒沒問題, 槽函式是在次執行緒執行的。

2. 通過在worker::start函式中直接開啟定時器,不報錯,證明定時器在主線程中。

3. 通過在槽函式中建立定時器,並啟動,不報錯。

4. 最終懷疑是因為定時器不屬於worker,所以worker移到次執行緒時,定時器還在主線程。將定時器父物件設為worker,驗證確實如此。

**:

#include class worker : public qobject

void ontimeout()

眾人拾柴火焰高。

賬戶所有權問題

誰能用 2a38cba2390fde 位址支付,誰就擁有這個賬戶的所有權 私鑰 sdhgkdnhgggsdjuufjlkkhsuhfggdngbf hash hash fun sdhgkdnhgggsdjuufjlkkhsuhfggdngbf 2a38cba2390fde 位元幣中乙個位址對應乙個私...

c 轉移執行緒所有權

c 中有很多資源占有型別,比如std ifstream,std unique ptr,std thread 都是可以移動不可拷貝的。可以通過std move 轉移乙個執行緒所有權給乙個未關聯執行緒的thread物件,但是不能通過賦乙個新值的方式丟棄乙個執行緒。void haha void heihe...

Qt之物件樹與所有權

qobjects在乙個物件樹中組織他們自己。當建立乙個qobject時,如果使用了其他物件作為其父物件,那麼,它就會被新增到父物件的children 列表中。這樣一來,當父物件被銷毀時,這個qobject也會被銷毀。事實表明,這個機制非常適合於管理gui物件。例如 乙個qshortcut 鍵盤快捷鍵...