Qt,如何立即暂停QThread

Qt,如何立即暂停QThread,qt,qthread,Qt,Qthread,我有一个侦听服务器的QThread。我想立即暂停QThread的工作。根本不等待,但几乎与终止一样,它必须立即停止。在任何给定线程中运行的代码不能在任意点停止,而不会损坏代码和/或C/C++运行时或任何其他使用的库中共享数据结构的状态 代码只能在定义明确的点停止 如果您的线程运行一个事件循环(即,通常如果您不是从QThread派生,或者没有重写它的run),那么QThread::quit()将在线程将控制权返回到事件循环时停止线程,这样做是安全的 如果线程重新实现在那里运行并执行循环,则当请求中

我有一个侦听服务器的
QThread
。我想立即暂停
QThread
的工作。根本不等待,但几乎与终止一样,它必须立即停止。

在任何给定线程中运行的代码不能在任意点停止,而不会损坏代码和/或C/C++运行时或任何其他使用的库中共享数据结构的状态

代码只能在定义明确的点停止

如果您的线程运行一个事件循环(即,通常如果您不是从
QThread
派生,或者没有重写它的
run
),那么
QThread::quit()
将在线程将控制权返回到事件循环时停止线程,这样做是安全的

如果线程重新实现在那里运行并执行循环,则当请求中断时,它应返回:

void MyThread::run() {
  while (! isInterruptionRequested()) {
    ...
  }
}
这样的线程可以通过
QThread::requestInterruption()
停止

以下是一些有时会混淆的
QThread
方法供参考:

  • wait()
    阻塞调用线程,直到被调用线程完成。当然,从线程本身内部调用它是即时死锁:如果线程等待永远不会发生的事情,它就无法完成

  • quit()
    尽早退出线程的事件循环,并导致
    QThread::run()
    返回。如果您重新实现了
    run()
    ,并且没有旋转事件循环,那么它不会起任何作用

  • requestTermination()
    设置一个标志,在
    YourThread::run()
    中的自定义循环可以通过
    isTerminationRequested()
    进行检查

  • terminate()
    立即停止线程。这通常会破坏应用程序的状态,因此您必须尽快
    中止()
    ,否则将面临后果。最好忘记这种方法。它本质上意味着“如果有机会,很快就会使这个过程崩溃并损坏一些磁盘数据”


您能提供一些代码吗。现在不清楚你的意思。正如您所看到的,msleep方法立即暂停线程的工作。这是你想要的吗?“它必须像刀子一样切割”或者QThread的函数发出信号。我想终止alrealdy工作时发出的信号。您是使用Qt网络类,还是其他(阻塞)侦听调用?无论如何,这个问题需要相关的代码!