簡體   English   中英

Qt C ++ moveToThread()

[英]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使用與該線程關聯的事件隊列,因此,通過該事件隊列傳遞給該對象的任何事件都將在該線程上進行處理。

這會將QObject移至新線程,並在Michael Burr已經說過的內容之上,您應該在此處查看文檔因為您至少錯過了一個已完成刪除操作的連接線程,以刪除QObject的deleteLater(這將導致內存泄漏)

暫無
暫無

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

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