c++ - 在 Qt 中使用完成信号退出线程并进行 clean_up 的正确方法

标签 c++ c multithreading qt

我有一个具有许多线程的应用程序。我想在关闭主应用程序时退出线程并调用线程析构函数进行必要的清理。

 Class Thread :public QThread{

 Thread(); 

  run(){

     while(1){

       //do work 
     } 

  }

 ~Thread(){

  //want to make clean up

     }
 }; 


 Class my_app :public QCoreapplication{

 my_app(){

 Thread th1;

 connect(&th1,SIGNAL(finished()),&th1,deleteLater());
 connect(&th1,SIGNAL(finished()),&th1,quit());


 }

 };




 //And my th1 thread runs in while.So I know that is the problem it runs on while and never emits the finished signal

 //How can be achievable?

最佳答案

  1. Do not subclass QThread
  2. 在工作循环中提供一些线程安全标志,指示工作人员应该结束其工作。
  3. 在终止应用程序之前,您应该调用 QThread::wait确保线程在应用程序终止之前正常结束。

关于c++ - 在 Qt 中使用完成信号退出线程并进行 clean_up 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268331/

相关文章:

无法理解程序的输出

c++ - c++中使用c头文件时是否需要在struct实例前放置 "struct"?

c++ - 如何在多线程环境中使用 JNI_CreateJavaVm (C++)

c++ - 父线程join() : Blocks Until Children Finish?

c++ - std :thread on macOS: libc++abi. dylib:终止

C++:如果括号为空,为什么不抛出错误对象?

c++ - 无法将 CLion 链接到 Windows 10 上的 QT

c++ - 可变数量的参数

c++ - 如果线程函数包含 "printf()",SetThreadAffinityMask() 似乎不起作用

c++ - 将在设计器中创建的 QWidget 添加到 QToolbar