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

QCoreApplication::processEvents()这个函数到底能做什么?

9
回复
39844
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2014-5-12 21:09:15 显示全部楼层 |阅读模式
1Qter豆
《qt creator 快速入门》例子3-9
里面有这个代码:

// 演示复制进度
    for(int i=0;i<50000;i++){

        // 设置进度条的当前值
        dialog.setValue(i);

        // 避免界面冻结
        QCoreApplication::processEvents();

        // 按下取消按钮则中断
        if(dialog.wasCanceled()) break;
    }

我想问一下,QCoreApplication::processEvents()这个函数到底能做什么?
Processes all pending events for the calling thread according to the specified flags until there are no more events to process.
看了解释,没看懂。是不是有点类似ucos 的ostimedly(); ?
是不是能然其他事件(函数?)获得cpu时间,不会导致僵死。不过这里我去了这句话,演示就变得不正常了。

最佳答案

查看完整内容

例如在ui界面里面 你写个 while(1) {;} 界面肯定会死,他阻塞了其他消息、事件等 while(1) { QCoreApplication::processEvents(); } 这样界面就不会死;它可以去处理其他消息、事件。 不知道这样解释对不对。。。
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2014-5-12 21:09:16 显示全部楼层
例如在ui界面里面
你写个
while(1)
{;}
界面肯定会死,他阻塞了其他消息、事件等
while(1)
{
QCoreApplication::processEvents();
}
这样界面就不会死;它可以去处理其他消息、事件。
不知道这样解释对不对。。。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 21:38:01 显示全部楼层
a408815041 发表于 2014-5-12 21:22
例如在ui界面里面
你写个
while(1)

我是这么理解的。啊
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-12 22:14:06 显示全部楼层
意思是进入消息循环,不仅处理当前事件,而且处理其它事件,我是这么理解的。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 22:22:24 显示全部楼层
Syylc120317 发表于 2014-5-12 22:14
意思是进入消息循环,不仅处理当前事件,而且处理其它事件,我是这么理解的。 ...

恩,谢谢啦。我对qt的时间和消息还没有看到。但是比照ucos的,应该可以模糊理解。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-12 22:24:34 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:22
恩,谢谢啦。我对qt的时间和消息还没有看到。但是比照ucos的,应该可以模糊理解。 ...

嗯,Qt的Assistant中写的挺详细的,只是英文的而异。我复制过来一些。
void QCoreApplication::processEvents ( QEventLoop:rocessEventsFlags flags = QEventLoop::AllEvents ) [static]
Processes all pending events for the calling thread according to the specified flags until there are no more events to process.

You can call this function occasionally when your program is busy performing a long operation (e.g. copying a file).

In event you are running a local loop which calls this function continuously, without an event loop, the DeferredDelete events will not be processed. This can affect the behaviour of widgets, e.g. QToolTip, that rely on DeferredDelete events to function properly. An alternative would be to call sendPostedEvents() from within that local loop.
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-12 22:32:55 显示全部楼层
Syylc120317 发表于 2014-5-12 22:24
嗯,Qt的Assistant中写的挺详细的,只是英文的而异。我复制过来一些。
void QCoreApplication::processEv ...

恩,不过英文这一段没有很好的理解吧。可能是对这里面的event loop 和local loop ,不是很理解。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-13 07:48:49 显示全部楼层
caiwei_cs 发表于 2014-5-12 22:32
恩,不过英文这一段没有很好的理解吧。可能是对这里面的event loop 和local loop ,不是很理解。 ...

event loop是时间循环,local loop是本地循环,可以理解为for、while的循环。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-13 20:42:34 显示全部楼层
Syylc120317 发表于 2014-5-13 07:48
event loop是时间循环,local loop是本地循环,可以理解为for、while的循环。

我理解为:eventloop 是查看事件队列,如果有事件则执行。
local 则不明白这个本地的意思了。
回复

使用道具 举报

累计签到:894 天
连续签到:1 天
2014-5-14 07:38:53 显示全部楼层
caiwei_cs 发表于 2014-5-13 20:42
我理解为:eventloop 是查看事件队列,如果有事件则执行。
local 则不明白这个本地的意思了。 ...

while (true) {
qDebug()<<"okay";
}
我把这样的理解为local loop.
回复

使用道具 举报

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

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