博客地址已更改,文章数量较多不便批量修改,若想访问源文请到 coologic博客 查阅,网址:www.coologic.cn

如本文记录地址为 techieliang.com/A/B/C/ 请改为 www.coologic.cn/A/B/C/ 即可查阅

 

版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:QThread安全的结束线程     本文地址:http://techieliang.com/2017/12/599/
文章目录

1. QThread使用

基本使用请见:http://techieliang.com/2017/12/592/

在上文中提到了一个简单范例:

  1. #include <QCoreApplication>
  2. #include <QThread>
  3. #include <QDebug>
  4. class MyThread : public QThread {
  5. protected:
  6. void run() {
  7. while(1) {
  8. qDebug()<<"thread start:"<<QThread::currentThreadId();
  9. msleep(500);
  10. }
  11. }
  12. };
  13. int main(int argc, char *argv[]) {
  14. QCoreApplication a(argc, argv);
  15. qDebug()<<"Main:"<<QThread::currentThreadId();
  16. MyThread m;
  17. m.start();
  18. QThread::sleep(5);
  19. m.terminate();
  20. m.wait();
  21. return 0;
  22. }

此范例使用terminate强制关闭线程,此行为是很危险的,下面提供一种安全的关闭方式

  1. #include <QCoreApplication>
  2. #include <QThread>
  3. #include <QDebug>
  4. class MyThread : public QThread {
  5. public:
  6. void stop() { //用于结束线程
  7. is_runnable =false;
  8. }
  9. protected:
  10. void run() {
  11. while(is_runnable) {
  12. qDebug()<<"thread start:"<<QThread::currentThreadId();
  13. msleep(500);
  14. }
  15. is_runnable = true;
  16. }
  17. private:
  18. bool is_runnable = true; //是否可以运行
  19. };
  20. int main(int argc, char *argv[]) {
  21. QCoreApplication a(argc, argv);
  22. qDebug()<<"Main:"<<QThread::currentThreadId();
  23. MyThread m;
  24. m.start();
  25. QThread::sleep(5);
  26. m.stop();
  27. m.wait();
  28. return 0;
  29. }

通过对while循环增加bool类型作为判断实现安全的结束线程,当is_runnable=false时,程序会完成此次循环后结束,所以要wait等待,不可直接关闭程序。

 

相关文章:

  • 2021-05-20
  • 2021-08-12
  • 2022-12-23
  • 2021-07-04
  • 2021-10-16
  • 2021-10-11
  • 2021-10-16
  • 2022-02-09
猜你喜欢
  • 2021-12-10
  • 2021-09-22
  • 2021-07-24
  • 2021-11-26
  • 2021-10-18
  • 2021-05-30
  • 2021-10-31
相关资源
相似解决方案