QT中新建執行緒的幾種方法

2021-09-12 02:05:13 字數 1766 閱讀 2010

qt新建執行緒的幾種方法:

1.繼承qthread新建乙個類,重寫run方法,此方法除run之外,其他的都還是在主線程中執行;

2.使用movetothread將新建執行緒轉移到繼承qobject的新類例項中;

方法1:

1.新建乙個類workthread,基類為qthread。

2.重寫類workthread的虛函式void run();,即新建乙個函式protected void run(),然後對其進行定義。

3.在需要用到多執行緒的地方,例項workthread,然後呼叫函式workthread::start()後,則開啟一條執行緒,自動執行函式run()。

4.當停止執行緒時,呼叫workthread::wait()函式,等待執行緒結束,並且**執行緒資源。

新建乙個類繼承qthread:

class workthread : public qthread

;

重寫類workthread的虛函式void run(),為執行緒需要執行的函式:

workthread::workthread()

void workthread::run()

;

在需要使用的地方新建執行緒和test物件,並繫結物件與槽函式,開啟執行緒:

test *test_w = new test();

qthread *thread = new qthread;

connect(thread, signal(started()), test_w, slot(first()));

test_w->movetothread (thread);

thread->start();

terminate()終止當前執行緒。執行緒或許不會立即被終止,依賴於執行緒的排程策略。一般情況下,呼叫該函式之後再呼叫qthread::wait()來確保執行緒結束。該執行緒終止後,等待該執行緒的其他執行緒將被喚醒。警告:該函式比較危險,不推薦這樣做。執行緒可能在任何**處終止。或許在修改資料時被終止,執行緒結束後自己不能去做清理工作。

wait(unsigned long time = ulong_max)阻塞當前的程序,直到滿足如下兩個條件之一: 1.相關的執行緒完成其任務,然後如果執行緒已經結束,則該函式返回true,如果執行緒沒有啟動,則該函式也會返回true。 2. 經過了特定長度的時間,如果時間是ulong_max(預設值),那麼wait()函式幾乎不會超時。(即該函式必須從run()函式返回)如果wait函式超時,那麼該函式會返回false。

quit()告訴執行緒的事件迴圈退出並且返回0值,相當於呼叫qthread::exit(0)。如果執行緒沒有事件迴圈,這個函式則什麼也不做。

exec()使執行緒進入事件迴圈狀態,並且處於wait狀態,直到呼叫exit()函式使其退出。退出時返回值是呼叫exit()函式時的輸入引數。如果呼叫quit()函式,其退出的返回值為0.該函式一般在run()函式中呼叫,使執行緒進入事件迴圈處理狀態。

exit(int returncode = 0)告知執行緒從事件迴圈狀態退出,並且返回returncode的值。一般說來,返回0表示成功退出,返回非0值表示遇到錯誤。呼叫該函式後,執行緒不會再進行事件處理,除非再次呼叫exec()函式。如果當前執行緒不處於執行狀態,那麼下次呼叫exec()也會直接返回

一般呼叫quit()函式之後可以緊接著呼叫wait()函式確保執行緒退出。

Nuke中新建執行緒的方法

寫完後在menu.py中通過os.system path 方法即可開啟document。但問題出現了。這個說明文件用word開啟後會占用nuke主線程,導致nuke陷入假死狀態。只有關閉word才可以解除nuke假死。也就是說,實際上,word與nuke是共用同乙個執行緒,顯然這是不可接受的。於是寫...

Qt執行緒同步的幾種方法

qmutex類就像一把鎖,在互斥量之前上鎖 qmutex lock 然後在使用完互斥量之後解鎖 qmutex unlock 比如下面的 void somemethod class thread1 public qthread class thread2 public qthread 如上面的 在函式...

Qt新建執行緒的方法

看了不少qt執行緒的東西,下面總結一下qt新建乙個執行緒的方法。繼承qthread,這應該是最常用的方法了。我們可以通過重寫虛函式void qthread run 實現我們自己想做的操作,實現新建執行緒的目的。前面已經介紹了qthread,這裡就不重複了。這種方法,我們每一次要新建乙個執行緒都需要繼...