qt中主线程把cpu全占了怎么办?

LKF_sk 2011-08-26 01:40:04
这是主线程中的函数
void MainWindow::on_pushButton_clicked()
{
i=0;
mythread *t1=new mythread;
t1->run();
QString str;
while(i<100000)
{
i=i+0.001;
str.setNum(i);
ui->lineEdit->setText(str);
repaint();
}
}
子线程mythread 利用一个定时器发消息,显示一个进度条
void mythread::run()
{
i=0;
connect(&timer1,SIGNAL(timeout()),this,SLOT(ValueChanged()));
timer1.start(1000);
d1.setvalue(0);
d1.setrange(1,20);
d1.show();
d1.repaint();
}
void mythread::ValueChanged()
{
if(i<20)
{
i=i+1;
d1.setvalue(i);
d1.repaint();
}
else
d1.close();
}
程序一运行,子线程的进度条就不动了,为什么?
如果把下面的语句注释了,就可以显示进度条了
while(i<1000)
{
i=i+0.001;
str.setNum(i);
ui->lineEdit->setText(str);
repaint();
}
怎么解决啊?那个大侠教教我,因为我主线程里面需要算一个比较长的程序,我猜测是主程序把cpu全占了,怎么能不让他独占?
...全文
263 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingfanliu 2011-08-26
  • 打赏
  • 举报
回复
学习中,不错
ttktw 2011-08-26
  • 打赏
  • 举报
回复
在while循环里尝试sleep(0),把CPU给其他线程
ma100 2011-08-26
  • 打赏
  • 举报
回复
while
里加1ms延时
luciferisnotsatan 2011-08-26
  • 打赏
  • 举报
回复
把子线程的优先级提高点。
xunxun 2011-08-26
  • 打赏
  • 举报
回复
睡眠一下
乔巴好萌 2011-08-26
  • 打赏
  • 举报
回复
你repaint是不是太频繁了
mythread 触发主界面的repaint 可能比较好些
帅得不敢出门 2011-08-26
  • 打赏
  • 举报
回复
做一个定时器吧, 一段时间 str.setNum
这样不用while(i<1000) 就不会占了.

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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