簡體   English   中英

Qt多線程QObject單例

[英]Qt Multithreaded QObject singleton

Singleton模式與QObject一起用於多線程的正確方法是什么? 當然,這種方式應該排除所有Qt多線程錯誤,例如

QObject:無法為處於不同線程中的父級創建子級。

我認為沒有普遍接受的正確方法可以做到這一點。 問題在於,在現代軟件中避免使用Singleton模式,因為對某個對象的全局引用會使單元測試非常困難,有時甚至是不可能的。

不要誤會我,在似乎合乎邏輯的地方設置單例是可以的。 問題出在模式上,您可以通過全局變量或函數MySingletonClass::getInstance()訪問它們。

嘗試通過構造函數參數或setter方法將其注入到需要的地方。

關於多線程:我不認為Singleton在這方面有什么特別之處。 它們與並發訪問的任何對象相同。

運行時錯誤消息特定於Qt,而不是C ++。 當然, 您可以使用每種方式使用在另一個線程上創建的對象 但是您不能將其作為父級(即Qt)傳遞給在另一個線程上創建的對象,以使父級在破壞自身時不會破壞其子級。 它也與Qt消息傳遞機制和計時器有關。 您可能還會發現QObject :: moveToThread描述也很有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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