回覆列表
  • 1 # 大國師魂系列

    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、呼叫任務管理器,可以觀察到是否出現記憶體洩漏。沒有任何操作,記憶體使用量不停增加,即為記憶體洩漏。

  • 中秋節和大豐收的關聯?
  • 朋友推薦我買現代ix25,我想買TACQUA探影?大家能給點建議嗎?