关于Qt子线程和消息循环
一、QT消息/事件循环机制
- Qt作为一个可视化GUI界面操作系统,是基于事件驱动的,我们程序执行的顺序不再是线性,而是由一个个应用程序内部或外部的事件进行驱动,无事件时便阻塞。这个循环概念类似于while的函数循环,函数体内不断处理用户的输入,类比到事件循环中,用户点击了鼠标、按下了键盘,便被称作为事件。
- 一般对于带UI窗口的程序来说,“事件”是由操作系统或程序框架在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,计时器触发的时候,都会发出一个相应的事件。我们把“事件循环”的代码 提炼/抽象 如下
function eventloop() {
initialize();
bool shouldQuit = false;
while(false == shouldQuit)
{
var message = get_next_message();
process_message(message);
if (message == QUIT)
{
shouldQuit = true;
}
}
}

机制解释
- 这样的程序运行流程,我们叫做“事件驱动”式的程序。一般的Qt程序,main函数中都有一个QCoreApplication
本文详细介绍了Qt的事件驱动机制,包括事件循环的概念、如何处理事件及消息队列的工作方式。同时,针对函数阻塞导致的UI卡住问题,提出了使用多线程和QEventLoop来避免阻塞事件循环的解决方案,强调了快速响应事件的重要性。
最低0.47元/天 解锁文章
1074

被折叠的 条评论
为什么被折叠?



