qt 如何停止一个线程

Michaellovekobe 2015-09-06 05:21:16
老调重弹的问题了
ThreadRead 是一个继承与QThread的线程类
ThreadRead *thVarify;//校正线程

点击“开始”
thVarify=new ThreadRead(this,0,OpNo);
thVarify->start();

启动线程

run函数是一个循环
while(true)
{
::Sleep(10000);
}
emit Signal_EnableButton(false,true);//不使能按钮


问题来了,点击“结束”
if(thVarify->isRunning())
{
thVarify->quit();
}
并不能停止该线程,仍然处于循环之中

exit也不行

请问,我不想用停止标志,有没有其他办法?
...全文
1314 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
千荒 2015-10-04
  • 打赏
  • 举报
回复
只是定时的话 为什么不直接用定时器?或者在线程里加定时器?(线程里的定时器操作貌似要movetothread一下)
小K小Q 2015-09-24
  • 打赏
  • 举报
回复
线程已经停了,只是::Sleep(10000); 还在运行没有停。可以换一个方式 。
dext 2015-09-07
  • 打赏
  • 举报
回复
quit 是用来 停止 EventLoop 是停止不了 sleep的,你需要 加 一个 变量 或者 用terminate
Michaellovekobe 2015-09-07
  • 打赏
  • 举报
回复
引用 2 楼 jiangcaiyang123 的回复:
::Sleep(10000);这样用不好吧,这个是Windows专用的。 换做QThread:msleep( 10000 )试试。 使用QThread::exit( returnCode )来终止, 还有在线程外面终止线程的办法,那就是QThread::terminate(),不过最好不要这么用。
那也就是说,QT就没有一键停止线程的方法了? 你说的exit我试过了,不行的 terminate停止就没反应了,不知道什么原因
彩阳 2015-09-06
  • 打赏
  • 举报
回复
::Sleep(10000);这样用不好吧,这个是Windows专用的。 换做QThread:msleep( 10000 )试试。 使用QThread::exit( returnCode )来终止, 还有在线程外面终止线程的办法,那就是QThread::terminate(),不过最好不要这么用。
Michaellovekobe 2015-09-06
  • 打赏
  • 举报
回复
自己顶一下,搜索了下,仍然没找到好办法

16,227

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧