找回密码
 立即注册
收起左侧

QT中的线程怎么退出

6
回复
9587
查看
[复制链接]
累计签到:49 天
连续签到:1 天
来源: 2015-8-27 17:46:55 显示全部楼层 |阅读模式
1Qter豆
  1. class Worker : public QObject
  2. {
  3.      Q_OBJECT

  4. public slots:
  5.      void doWork() {
  6.          ...
  7.      }
  8. };

  9. void MyObject::putWorkerInAThread()
  10. {
  11.      Worker *worker = new Worker;
  12.      QThread *workerThread = new QThread(this);

  13.      connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));
  14.      connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
  15.      worker->moveToThread(workerThread);

  16.      // Starts an event loop, and emits workerThread->started()
  17.      workerThread->start();
  18. }
复制代码
例子中的程序,start以后会执行,doWork(),函数,doWork函数执行完毕以后,并没有收到finished(),信号,线程怎么退出阿?不能自动退出吗?必须调用workerThread指针操作,才可以退出吗?

最佳答案

查看完整内容

额,没看仔细,以为是从QThread继承的。 那你可以在doWork结束的时候抛个信号,收到这个信号的时候结束线程。 或者从QThread继承,把run里面doWork,完了就调用quit结束线程。 或者使用QFuture吧!会更方便些呵!
回复

使用道具 举报

尚未签到

2015-8-27 17:46:56 显示全部楼层
额,没看仔细,以为是从QThread继承的。
那你可以在doWork结束的时候抛个信号,收到这个信号的时候结束线程。
或者从QThread继承,把run里面doWork,完了就调用quit结束线程。
或者使用QFuture吧!会更方便些呵!
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-8-28 08:31:44 显示全部楼层
线程启动了不是运行run函数吗?run函数结束了,才是线程结束吧?
回复

使用道具 举报

尚未签到

2015-8-28 09:55:45 显示全部楼层
还没有退出,当然不会有finished信号了,在doWork结束的时候执行quit()。
回复

使用道具 举报

累计签到:49 天
连续签到:1 天
2015-8-28 11:42:07 显示全部楼层
smallai 发表于 2015-8-28 09:55
还没有退出,当然不会有finished信号了,在doWork结束的时候执行quit()。

doWork函数所在的类,没有quit()这个函数。
回复

使用道具 举报

累计签到:49 天
连续签到:1 天
2015-8-31 09:35:26 显示全部楼层
smallai 发表于 2015-8-28 20:30
额,没看仔细,以为是从QThread继承的。
那你可以在doWork结束的时候抛个信号,收到这个信号的时候结束线程 ...

好的,谢谢您,我试一下信号行不行。
回复

使用道具 举报

累计签到:49 天
连续签到:1 天
2015-8-31 11:46:54 显示全部楼层
smallai 发表于 2015-8-28 20:30
额,没看仔细,以为是从QThread继承的。
那你可以在doWork结束的时候抛个信号,收到这个信号的时候结束线程 ...

用了个信号,果然可以,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了