QT自由線程的終止


 

1. QT線程(QThread的子類)的退出:

(1)使用terminate()函數無法退出;線程可能會立即被終止也可能不會,這取決於操作系統的調度策略,使用terminate()之后再使用QThread::wait()確保萬無一失。但我在程序中我發現使用VS2017編譯的程序無法使用terminate()。

(2)當刪除(delete)線程實例時,出現阻塞,程序無法進行。

解決方法:

(1)不再使用terminate退出,使用條件退出run函數

(2)在刪除線程實例時,可能需要判定它是否退出了run函數;最簡單的是使用wait(1000)這樣的函數等待其退出后再刪除。

2. QT線程中使用zmq時:

(1)可能會在zmq_recv函數阻塞時,無法退出線程

解決方法:

(1)采用定時的接收阻塞,保證有非阻塞狀態來檢查退出條件;

    int recvTime = 1000;
    zmq_setsockopt(_socket, ZMQ_RCVTIMEO, &recvTime, sizeof(recvTime));

 

(2)在退出線程時最好將連接關閉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM