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