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)在退出线程时最好将连接关闭。

相关文章:

  • 2021-12-15
  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-01
  • 2021-12-09
  • 2021-09-01
  • 2021-08-11
猜你喜欢
  • 2021-09-14
  • 2022-12-23
  • 2021-06-09
  • 2021-07-03
  • 2021-06-29
  • 2022-12-23
相关资源
相似解决方案