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全占了,怎么能不让他独占?
...全文
163 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mingfanliu 2011-08-26
学习中,不错
回复
ttktw 2011-08-26
在while循环里尝试sleep(0),把CPU给其他线程
回复
ma100 2011-08-26
while
里加1ms延时
回复
把子线程的优先级提高点。
回复
xunxun 2011-08-26
睡眠一下
回复
乔巴好萌 2011-08-26
你repaint是不是太频繁了
mythread 触发主界面的repaint 可能比较好些
回复
做一个定时器吧, 一段时间 str.setNum
这样不用while(i<1000) 就不会占了.
回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2011-08-26 01:40
社区公告
暂无公告