[英]Qt C++ moveToThread()
我剛剛開始在Windows上使用Qt,並了解了moveToThread()函數。 我這樣寫可以嗎:
class Worker : public QObject
{
Q_OBJECT
private:
QThread* thread;
public:
void GoToThread() {
thread = new QThread();
this->moveToThread(thread);
}
void DoWork() {
//long work
}
};
Worker* w = new Worker();
w->GoToThread();
w->DoWork();
這段代碼到底會做什么? 它會把自己放到線程上嗎? 我可以在外面調用DoWork()嗎?
在您給出的示例中, DoWork()
將在調用者的線程上執行。
如果您希望在Worker
對象的線程上完成DoWork()
,則應該讓DoWork()
是一個插槽,可以通過發出已將其連接的信號或通過將QMetaObject::invokeMethod()
調用為'稱它為。
基本上,將Q_OBJECT
移至另一個線程將使Q_OBJECT
使用與該線程關聯的事件隊列,因此,通過該事件隊列傳遞給該對象的任何事件都將在該線程上進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.