Qt多執行緒總結;
一、Qt下使用執行緒主要有兩種方法。
一種是傳統的繼承QThread類,重寫run方法。
該方法已經落伍了,主要原因執行緒不安全,需要自己手動加鎖,比較麻煩,所以推薦使用方法二。
定義一個工作執行緒(Worker類)繼承QObject,在主執行緒(Controller類)中建立QThread物件、Worker物件,Worker物件呼叫moveToThread方法。
這樣一來,整個Worker物件都移入執行緒中(執行緒安全),然後在主執行緒中每發射一次訊號給工作執行緒,工作執行緒的槽函式就執行一次。
工作執行緒執行完,再發射訊號到主執行緒中,以便釋放記憶體。
新建一個Woker物件和一個QThread物件,才能建立一個執行緒,如果要建立若干多個執行緒,則需要若干個Woker物件和QThread物件了。
二、Qt下建立多執行緒也有兩種方法。
一種是使用容器(如:QVector類、QList類)去裝入多個Worker物件和多個QThread物件,使用[](類似陣列的操作),即可訪問單個物件。
另一種是使用併發類QtConcurrent。
三、其它問題。
1、使用執行緒時,能編譯透過但是提示段錯誤,原因是沒有在建構函式內new Worker物件和QThread物件。
2、記憶體洩漏,執行緒做完時,需要呼叫quit方法、wait方法,還要delete Worker物件和QThread物件。如果後面還要使用該執行緒,則再加上new Worker物件和QThread物件。
3、呼叫任務管理器,可以觀察到是否出現記憶體洩漏。沒有任何操作,記憶體使用量不停增加,即為記憶體洩漏。
Qt多執行緒總結;
一、Qt下使用執行緒主要有兩種方法。
一種是傳統的繼承QThread類,重寫run方法。
該方法已經落伍了,主要原因執行緒不安全,需要自己手動加鎖,比較麻煩,所以推薦使用方法二。
定義一個工作執行緒(Worker類)繼承QObject,在主執行緒(Controller類)中建立QThread物件、Worker物件,Worker物件呼叫moveToThread方法。
這樣一來,整個Worker物件都移入執行緒中(執行緒安全),然後在主執行緒中每發射一次訊號給工作執行緒,工作執行緒的槽函式就執行一次。
工作執行緒執行完,再發射訊號到主執行緒中,以便釋放記憶體。
新建一個Woker物件和一個QThread物件,才能建立一個執行緒,如果要建立若干多個執行緒,則需要若干個Woker物件和QThread物件了。
二、Qt下建立多執行緒也有兩種方法。
一種是使用容器(如:QVector類、QList類)去裝入多個Worker物件和多個QThread物件,使用[](類似陣列的操作),即可訪問單個物件。
另一種是使用併發類QtConcurrent。
三、其它問題。
1、使用執行緒時,能編譯透過但是提示段錯誤,原因是沒有在建構函式內new Worker物件和QThread物件。
2、記憶體洩漏,執行緒做完時,需要呼叫quit方法、wait方法,還要delete Worker物件和QThread物件。如果後面還要使用該執行緒,則再加上new Worker物件和QThread物件。
3、呼叫任務管理器,可以觀察到是否出現記憶體洩漏。沒有任何操作,記憶體使用量不停增加,即為記憶體洩漏。