zoukankan      html  css  js  c++  java
  • 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)在退出线程时最好将连接关闭。

  • 相关阅读:
    jquery 学习笔记
    session
    六、线程中断机制
    二、CompletableFuture(一)基础概念
    四、常见的锁
    五、synchronized细节
    三、CompletableFuture(二)常见用法
    七、等待唤醒的三种方式
    序列化 和 反序列化
    Trigger
  • 原文地址:https://www.cnblogs.com/myboat/p/14094178.html
Copyright © 2011-2022 走看看