Qt5多線程技術集錦

1、用QObject的方法實現多線程

Qt有兩種多線程的方法,其中一種是繼承QThread的run函數,另外一種是把一個繼承於QObject的類轉移到一個Thread裏。 Qt4.8之前都是使用繼承QThread的run這種方法,但是Qt4.8之後,Qt官方建議使用第二種方法

第二種方法用QObject來實現多線程有個非常好的優點,就是默認就支持事件循環(Qt的許多非GUI類也需要事件循環支持,如QTimerQTcpSocket),QThread要支持事件循環需要在QThread::run()中調用QThread::exec()來提供對消息循環的支持,否則那些需要事件循環支持的類都不能正常發送信號,因此如果要使用信號和槽,那就直接使用QObject來實現多線程。

https://doc.qt.io/qt-5/threads.html

https://wiki.qt.io/QThreads_general_usage

https://wiki.qt.io/Threads_Events_QObjects

 

 

2、QFutureWatcher實現進度條

長時間進行操作時,通常需要顯示進度條。 在某些耗時的運算中,我們沒有方法來實時跟蹤操作的進度,所知的只是運算完成時。 爲了實現進度條,您可以使用progressBar小部件,然後在另一個線程中運行該操作(使用moveToThread)。 這通常需要創建一個特殊的對象(QObject的子類,該對象運行操作,然後發出finish信號),如果您需要對許多不同的操作執行此操作,則可能會很麻煩。但是,使用QFutureWatcher和QtConcurrent::run(),這非常容易。 這篇官方文檔演示如何將這種技術與QProgressDialog和QProgressBar一起使用。

如果QProgressBar最小值和最大值都設置爲0,進度條會顯示一個繁忙指示,而不會顯示當前的值。

https://wiki.qt.io/Progress_Bar

 

 

3、多線程的高級應用

TCP Client/TCP Server

https://sourceforge.net/projects/threader-qt/

https://sourceforge.net/p/threader-qt/svn/HEAD/tree/

future/promise【推薦】

https://github.com/mhogomchungu/tasks
 

 

x、參考文獻

https://github.com/czyt1988/czyBlog/tree/master/tech/QtThread

https://www.cnblogs.com/xia-weiwen/p/10306089.html

https://github.com/Xia-Weiwen/CopyFile

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章