QT里的事件循环点点滴滴

如何让程序等待一段时间
QTime t;
t.start();
while(t.elapsed()<1000);
这种死循环也是一种常见错误用法。但改成正确的还是比较简单的:

QTime t;
t.start();
while(t.elapsed()<1000)
QCoreApplication::processEvents();

参考:http://dreamylights.blog.51cto.com/1163218/1538220

--------------------------------------------------------------------

时间: 2024-10-28 10:45:12

QT里的事件循环点点滴滴的相关文章

图解js里的事件循环---机制

理解事件循环之前先要知道何为异步同步,(事件循环看最后一句) 同步:程序按顺序连续执行 在主线程上排队执行任务.前一个完毕,后一个才执行 如果要等,会一直等待下去,直到收到消息再执行?. 阻塞? 异步:程序不连续分段执行 为了不阻塞.不浪费等待的时间 比喻:事情可以分为前半段和后半段,同步是前半段后半段同时按顺序一起完成.异步是先做前半段,后半段有时间再做. 我理解的 总结 1栈里会按顺序执行队列, ? 2有多个队列:事件队列(主).宏队列.微队列 3 异步分为:宏任务.微任务,对应宏队列和微队

Qt 学习之路:线程和事件循环

前面一章我们简单介绍了如何使用QThread实现线程.现在我们开始详细介绍如何“正确”编写多线程程序.我们这里的大部分内容来自于Qt的一篇Wiki文档,有兴趣的童鞋可以去看原文. 在介绍在以前,我们要认识两个术语: 可重入的(Reentrant):如果多个线程可以在同一时刻调用一个类的所有函数,并且保证每一次函数调用都引用一个唯一的数据,就称这个类是可重入的(Reentrant means that all the functions in the referenced class can be

Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)

周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解.从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益. 从 dbzhang800 的博客中转载两篇关于事件循环的文章,放在一起,写作备忘. 再次提到的一点是:事件循环和线程没有必然关系. QThread 的 run() 方法始终是在一个单独

Qt事件循环与状态机事件循环的思考

写下这个给自己备忘,关于事件循环以及多线程方面的东西我还需要多多学习.首先我们都知道程序有一个主线程,在GUI程序中这个主线程也叫GUI线程,图形和绘图相关的函数都是由主线程来提供.主线程有个事件循环Event Loop,其实就是一个死循环在不断的等待你的消息队列,通过消息队列完成响应用户操作,绘图,以及相关操作.我们都知道QDialog有一个exec函数,这个函数会形成“模态”对话框,然后等待用户去输入OK还是Cancel,否则他绝不返回,如下 void test() { QDialog di

Qt:事件和事件循环

最近想要了解一下Qt线程,但在对相关资料师都是从线程和事件循环开始将.对于事件循环是个相对很抽象的概念,研究了很久也很难在脑子里建立起一个具体的模型.今天在这里对这几天研究内容做总结,为以后做参考. 一.事件 网上很多资料都将的很清楚.在这里重点是明确一下一个事件发出后对于该事件的一个调用顺序.在这里我们在QApplication安装一个过滤器,在一个一个Qwidget安装一个过滤器 代码如下: class Label : public QWidget { public: Label() { i

QT中的线程与事件循环理解(2)

1. Qt多线程与Qobject的关系 每一个 Qt 应用程序至少有一个事件循环,就是调用了QCoreApplication::exec()的那个事件循环.不过,QThread也可以开启事件循环.只不过这是一个受限于线程内部的事件循环.因此我们将处于调用main()函数的那个线程,并且由QCoreApplication::exec()创建开启的那个事件循环成为主事件循环,或者直接叫主循环.注意,QCoreApplication::exec()只能在调用main()函数的线程调用.主循环所在的线程

在不开启事件循环的线程中使用QTimer(QThread::run函数自带事件循环,在构造函数里创建线程,是一种很有意思的线程用法) good

引入 QTimer是Qt自带的定时器类,QTimer运行时是依赖于事件循环的,简单来说,在一个不开启事件循环(未调用exec() )的线程中,QTimer是无法使用的.通过分析Qt源码可发现,调用QTimer::start()后仅仅是在系统的定时器向量表中添加了一个定时器对象,但定时器并没有真正开启.定时器的开启需要通过processEvent()开始的一系列调用后才会真正得开启,这个过程中会处理定时器向量表中所有的定时器对象.那么实际exec()中也是在不断地调用processEvent()方

乱谈Qt事件循环嵌套

本文旨在说明:QDialog::exec().QMenu::exec()等开启的局部事件循环,易用的背后,还有很多的陷阱... 引子 Qt 是事件驱动的,基本上,每一个Qt程序我们都会通过QCoreApplication或其派生类的exec()函数来开启事件循环(QEventLoop): int main(int argc, char**argv) { QApplication a(argc, argv); return a.exec(); } 但是在同一个线程内,我们可以开启多个事件循环,比如

关于Qt的事件循环以及QEventLoop的简单使用

1.一般我们的事件循环都是由exec()来开启的,例如下面的例子: 1 QCoreApplicaton::exec() 2 QApplication::exec() 3 QDialog::exec() 4 QThread::exec() 5 QDrag::exec() 6 QMenu::exec() 这些都开启了事件循环,事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出.从exec()跳出时,事件循环即被终止