在Qt中使用多執行緒,目前就我使用過的有兩種,一是子類化QThread,重寫run函式,在run函數里實現自己的程式碼,這一部分程式碼通常是比較耗時,或者乾脆直接阻塞的。比如一個while迴圈,設定一個標誌,判斷迴圈結束。 這樣的例子在網上有很多,就不寫了。 這樣寫的話,會有一些東西需要了解。 子類化QThread的方法,只有run函數里面的內容是執行在子執行緒裡的,其他的部分,比如槽函式什麼的還是在主執行緒裡執行(假設是在主執行緒開啟的該子執行緒)。 還有一種方法,是子類化QObject,新建一個執行緒,然後使用MoveToThread把這個類的物件移到新建的執行緒中,這種做法使得它所有的槽函式都是執行在新開闢的執行緒裡面。 如果直接(QObject物件).abc()的話,這個成員函式是在主程序內執行,可能會出現"QObject::killTimer: timers cannot be stopped from another thread"的執行錯誤。 使用第二種方法的話,貌似會遇到這樣的問題:如果在一個槽函式中把子執行緒阻塞,其他的槽函式無法接受來自主執行緒
在Qt中使用多執行緒,目前就我使用過的有兩種,一是子類化QThread,重寫run函式,在run函數里實現自己的程式碼,這一部分程式碼通常是比較耗時,或者乾脆直接阻塞的。比如一個while迴圈,設定一個標誌,判斷迴圈結束。 這樣的例子在網上有很多,就不寫了。 這樣寫的話,會有一些東西需要了解。 子類化QThread的方法,只有run函數里面的內容是執行在子執行緒裡的,其他的部分,比如槽函式什麼的還是在主執行緒裡執行(假設是在主執行緒開啟的該子執行緒)。 還有一種方法,是子類化QObject,新建一個執行緒,然後使用MoveToThread把這個類的物件移到新建的執行緒中,這種做法使得它所有的槽函式都是執行在新開闢的執行緒裡面。 如果直接(QObject物件).abc()的話,這個成員函式是在主程序內執行,可能會出現"QObject::killTimer: timers cannot be stopped from another thread"的執行錯誤。 使用第二種方法的話,貌似會遇到這樣的問題:如果在一個槽函式中把子執行緒阻塞,其他的槽函式無法接受來自主執行緒