建设摩托车官方网站,机械设备东莞网站建设,做音乐网站的栏目,罗湖商城网站设计公司事件原因#xff1a;
前些时间遇到一个问题#xff0c;在主线程接收子线程读的数据#xff0c;一直接收不到#xff0c;但放在子线程没有问题#xff1b;
后面查了一下#xff0c;因为接收子线程使用了 qApp-processEvents(); 查了一下 qApp-processEvents(); …事件原因
前些时间遇到一个问题在主线程接收子线程读的数据一直接收不到但放在子线程没有问题
后面查了一下因为接收子线程使用了 qApp-processEvents(); 查了一下 qApp-processEvents(); 用处会优先响应主线程UI线程 防止UI线程卡顿
查了一下主要有两个作用
可做延时函数 QCoreApplication::ProcessEvents(QEventLoop::AllEvents, 50);在处理需要长时间的操作时为了保持界面响应 在复杂操作的过程中频繁调用QApplication::processEvents();如使用线程读数据同时保证界面响应 while (!isRunning) {doWork();qApp-processEvents();} 还有一种应用场景
处理一些跟界面无关的但耗时的事情这些事情跟界面在同一个线程中由于时间太长导致界面无法响应处于“假死”状态。
在这种情况下有一种方法是使用多线程即在子线程中处理文件保存 最简单的办法就是在文件保存过程中频繁调用QApplication::processEvents()。
该函数的作用是让程序处理那些还没有处理的事件然后再把使用权返回给调用者。
bool writeFile(const QString filename)
{QFile file(filename);int rowCount100;QApplication::setOverrideCursor(Qt::WaitCursor);for(int r 0; r ! rowCount; r){for(int c 0; c ! colCount; c){//writefile ;qApp.processEvents();}}QApplication::restoreOverrideCursor();
}