Qt延时处理的四种方法

这里提供四种方法:

1、 多线程程序使用QThread::sleep()或者QThread::msleep()QThread::usleep()QThread::wait()进行延时处理。

Sleep方法不会释放对象锁,其他线程无法访问对象,因此会阻塞线程;而Wait方法会释放对象锁,使得其他线程能够访问该对象。

2、 自定义延时函数:
使用QEventLoop

void Widget::Sleep(int msec)
{QTime dieTime = QTime::currentTime().addMSecs(msec);while( QTime::currentTime() < dieTime )QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

传入参数msec,使程序延时msec毫秒。这种方法不会阻塞当前线程,尤其适合Qt的单线程带UI程序,或者UI线程,因为线程阻塞时,很明显的现象就是UI卡死。当然,你也可以更改addMSecs为addSecs使程序延时msec秒。如果去掉QCoreApplication::processEvents(QEventLoop::AllEvents, 100)可以延时,但也会阻塞线程。它可以使得程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。

3、 使用QElapsedTimer

#include <QElapsedTimer>QElapsedTimer t;
t.start();
while(t.elapsed()<10000);

上述代码使程序延时10 s,但是这种方法也会阻塞线程。

4、 创建子事件循环,在子事件循环中,父事件循环仍然是可以执行的
这种方法不会阻塞线程

void Delay_MSec(unsigned int msec)
{QEventLoop loop;//定义一个新的事件循环QTimer::singleShot(msec, &loop, SLOT(quit()));  //创建单次定时器,槽函数为事件循环的退出函数loop.exec();  //事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}

参考链接:https://blog.csdn.net/qq_40194498/article/details/80063960

Qt延时处理的四种方法相关推荐

  1. STM32延时函数的四种方法:普通延时(2种)、SysTick 定时器延时(2种)

    STM32延时函数的三种方法:普通延时.SysTick 定时器延时(1.中断方式:2.非中断方式) 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ ...

  2. stm32延时us寄存器_STM32延时函数的四种方法

    关注.星标公众号,不错过精彩内容 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. ...

  3. iar stm32_STM32延时函数的四种方法

    关注.星标公众号,不错过精彩内容 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207介绍4种不同方式实现的延时函数. ...

  4. STM32延时函数的四种方法

    目录 1.普通延时 2.定时器中断 3.查询定时器 4.汇编指令 单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms().本文基于STM32F207 ...

  5. 【Qt】Qt多线程开发—实现多线程设计的四种方法

    Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...

  6. 【Qt】QTableView中嵌入复选框CheckBox 的四种方法总结

    搜索了一下,QTableView中嵌入复选框CheckBox方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简单,通常用这种方法. 第三种只适合静态显示静态数据用 第四 ...

  7. Qt 延时处理的几种办法

    有些时候,我们需要程序延时一会儿: 这里提供四种方法: 1.多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread:: ...

  8. 如何应对云爆发架构?四种方法替你解忧

    [TechTarget中国原创] 虽然大多数CIO喜欢混合云方案,但现实却悄悄遇到了点烦人的小问题--如受美国和欧盟的一些电信业务光纤连接投资不足所累.欢迎来到云爆发架构的地狱式网络体验. 缺乏公有云 ...

  9. iOS-UITextField中给placeholder动态设置颜色的四种方法

    思路分析: 0.自定义UITextField 1.设置占位文字的颜色找-->placeholderColor,结果发现UITextField没有提供这个属性 2.在storyboard/xib中 ...

最新文章

  1. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
  2. 如何用Powerdesigner的PDM(物理数据模型)生成数据库及逆向工程(将现有的数据库生成PDM)(转)...
  3. 马斯克SpaceX内部信曝光:戒骄戒躁,我们的首要任务是星际飞船
  4. SQLServer2008 视图创建实例
  5. 力扣- -阶乘函数后K个零
  6. (35)VHDL实现JK触发器
  7. css3漂亮的渐变图案,CSS3 带渐变图案的圆球
  8. 一则 Oracle 和 SqlServer 语法区别 (原创)
  9. Android开发环境搭建-eclipse+ADT及hello world
  10. Cordova+Vue快速搭建Hybrid App
  11. 毕设题目:Matlab数字信号调制
  12. wap2.0技巧篇(转)
  13. 欧姆龙nb触摸屏通信_313C和欧姆龙NB触摸屏怎么通讯
  14. 《UnityAPI.Camera摄像机》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+allCameras+cullingMask+OnPreCull+立钻哥哥++OK+)
  15. 高德地图之逆地理编码
  16. phalcon mysql port_Phalcon数据库抽象层
  17. PTF渗透测试框架使用
  18. 外国官方网站下载文件速度缓慢
  19. Python批量对DJ歌曲进行下载,配合电子木鱼更佳
  20. oracle修复工具下载,Oracle数据库恢复工具DataNumen Oracle Recovery

热门文章

  1. [转载] DBA职业生涯规划:八步打造高级DBA专家
  2. 关于广告精准投放的数据分析项目——用MYSQL实现
  3. [Nginx]Ngnix基础
  4. 毕业设计—共享图书小程序3.0 全新UI
  5. Excel如何使用SUM函数求和
  6. 计算机二级考试python考试大纲_全国计算机等级考试二级Python语言程序设计考试大纲(2018年版)...
  7. 程序员:被问“刚毕业吧”,憋一口老血如何回击?网友:不理睬!
  8. ripro主题后台Jsdelivr CDN 加速服务挂了的临时解决方案。
  9. nova service的heatbeat机制
  10. [flex]flex-direction: column;