关于QT多线程的问题

碎碎念 2014-12-23 03:23:12
通过编写一个类c1继承QThread,然后重写其中的run方法来实现多线程,在主线程中调用c1的start函数
run函数是这样子的

void c1::run()
{
QTime t1;
while(1)
{
//接受数据
//处理数据
//emit 信号,通知主线程更新参数
t1.start(); //间隔1s刷新数据
while(t1.eslaped() < 1000)
; //之前在while里面调用的是 QCoreApplication::processEvents但是发现调用 QCoreApplication::processEvents后,
//该线程会长时间得不到执行,然后我就把while循环里面设置为空语句了。
}
}


当线程 执行以后cpu占用率25%左右,有时候主线程需要同时开启多个类似的线程,一直这么运行的话,过一会程序就会死掉,是哪里写的有问题?
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2014-12-24
  • 打赏
  • 举报
回复
看看《C++ GUI Programming with Qt 4》里面多线程那一章,看懂了就不会这么写多线程的程序了
ibm123 2014-12-24
  • 打赏
  • 举报
回复
类似你这种需求,没有必要用QThread, 直接用QTimer就行了: QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateData())); timer->start(1000);
  • 打赏
  • 举报
回复
死循环会吃掉你所有的时间片 该sleep的sleep,该block的block,不要让CPU做无用功
碎碎念 2014-12-23
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
因为t1.eslaped()这个调用在循环中重复调用很占CPU,你可以用定时器啊。
还有,如果把 t1.start(); //间隔1s刷新数据 while(t1.eslaped() < 1000) ; 这段去掉的话,cpu占用率是不是会更高?
碎碎念 2014-12-23
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
因为t1.eslaped()这个调用在循环中重复调用很占CPU,你可以用定时器啊。
因为主线程,还有一些其他的事务要处理,用定时器,会让主线程变卡吧,主线程是界面线程。。。 其实t1.elasped()的那个循环,我就是想让线程停1s,不然的数据会一直刷新,还有什么其他方式来实现让线程停1s吗?
zyq5945 2014-12-23
  • 打赏
  • 举报
回复
因为t1.eslaped()这个调用在循环中重复调用很占CPU,你可以用定时器啊。

16,211

社区成员

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

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