0x01 使用qrunable來處理耗時的操作
繼承qrunable 的類需要重寫其基類的run()
方法,常與執行緒池qthreadpool類一起使用。qthreadpool用於管理qrunable,使用qthreadpool 中的start()
方法將qrunable子類置於執行緒池中管理。
0x02 採用concurrent模組中的高階介面
concurrent模組中的qfuturethread = qtconcurrent::run(funtion,parmsone,parmstwo)
方法來開啟乙個執行緒,其中function 為要呼叫的函式的名稱,parmsone,parmstwo為要呼叫的函式的引數列表,一旦執行緒啟動後,再次修改其引數對於執行緒內部資料的更改是無效的;採用此方法啟動的執行緒thread ,無法控制其暫停、取消和進度顯示,僅能通過thread 查詢其執行緒的執行或完成狀態。
0x03 使用core模組中的介面
core模組中的qthread類也能實現開啟乙個子執行緒,其用法和qrunable類似都需要子類繼承其父類並實現run()
方法,不同的是qthread類提供了更為複雜的控制,不需要執行緒池統一管理就可以完成相關的操作。繼承自qthread類的子類只有其run方法中的物件或資料執行在新的子執行緒中,其它成員仍然是執行在建立qthread子類的執行緒中。
0x04 採用qobject中的movetothread方法
對於繼承自qobject的子類可以採用movetothread 方法,將其子類的一些成員函式移到新的子執行緒中去執行:myobject->movetothread(qthread *targetthread);
此方法只能將乙個物件「推到」另乙個執行緒,而不能將乙個物件從其它執行緒「拉到」當前執行緒。
建立執行緒的幾種方式
thread,runnable,callable runnable和callable的區別是,1 callable規定的方法是call runnable規定的方法是run 2 callable的任務執行後可返回值,而runnable的任務是不能返回值得 3 call方法可以丟擲異常,run方法不可以...
建立執行緒的幾種方式
class a int operator int n void foo int x int main 6 lambda表示式 thread t7 a f,a,8,w 傳遞a的拷貝的成員函式給子執行緒 thread t8 a f,a,8,w 傳遞a的位址的成員函式給子執行緒 futurefu asyn...
建立執行緒的幾種方式
建立執行緒有四種方式 1.繼承thread類 public class mythread00 extends thread public static void main string args 2.實現runnable介面 public class mythread01 implements ru...