有些时候,我们需要程序延时一会儿:

这里提供四种方法:

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); 可以延时,但也会阻塞线程

QCoreApplication::processEvents(QEventLoop::AllEvents, 100);

使程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。

3、使用QElapsedTimer
头文件:#include <QElapsedTimer>

 QElapsedTimer t;t.start();while(t.elapsed()<10000);

上述代码使程序延时10S(10000MS),但是这种方法也会阻塞线程。

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

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

Qt 延时处理的几种办法相关推荐

  1. Qt延时处理的四种方法

    Qt延时处理的四种方法 这里提供四种方法: 1. 多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait( ...

  2. qt延时 QT中简单的延时办法

    来自 http://www.qtgtk.com/qt延时-qt中简单的延时办法/ QEventLoop eventloop; QTimer::singleShot(time, &eventlo ...

  3. Qt延时和startTimer

    Qt延时的几种用法 一.常用延时方式 #include <QTimer> #include <QThread> #include <QDateTime>int ms ...

  4. qt模拟键盘的三种实现方式(思路+demo)

    转载:http://www.360doc.com/content/13/1122/15/6828497_331303961.shtml 按照我自己的理解,qt模拟键盘分三个层次的模拟. 1.单线程的模 ...

  5. eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...

    eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样 第一种说法: 还真的找到解决的方法了, ...

  6. WinAPI: SetRect 及初始化矩形的几种办法

    为什么80%的码农都做不了架构师?>>>    本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messa ...

  7. php 怎么防注入,php 防止注入的几种办法

    php教程 防止注入的几种办法 其实原来就是我们需要过滤一些我们常见的关键字和符合如: select,insert,update,delete,and,*,等等 例子: function inject ...

  8. 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...

    应用场景 下图幻灯片中第一排为插入流程图形状"过程""数据""终止"时的默认样式,默认样式中形状填充色为蓝色,形状内文字为等线18号.如果我 ...

  9. php怎么随机生成二个中文,PHP生成随机字符串的两种办法

    通常情况下,生成一个随机字符串,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. 本文介绍两种生成随机字符串的办法 ...

最新文章

  1. centOS 7 安装man中文版手册
  2. x3650m5不自动进系统_17日起,泉州这个地方自动抓拍系统启用!这些车闯红灯、严重超载、不按道行驶被查处曝光!【交通大整治】...
  3. Html内联定义特点,HTML5
  4. html中padding和margin的区别和用法与存在的bug消除
  5. 剑指offer之求1+2+...+n
  6. Android四大组件---BroadcastReceiver
  7. 图片上传的ajax代码,一个伪ajax图片上传代码的例子
  8. Java开发新手经常遇到的一些问题
  9. React入门第一天(绑定事件,动态渲染,修改样式、传参)
  10. DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
  11. 关于MacOS升级10.13系统eclipse菜单灰色无法使用解决方案
  12. centos 7 iso u盘安装_树莓派Raspberry Pi 4B安装VMware ESXi
  13. java设置列宽_java用POI设置Excel的列宽
  14. 任小龙 mysql笔记_任小龙java基础的Excel笔记(完整版)
  15. Latex 宏定义中 \relax
  16. 银河麒麟/ubuntu 下安装/卸载软件包命令大全
  17. KNN算法和Kernel KNN算法的区别
  18. 3344avd_AVD生根
  19. AcWing 1309. 车的放置 (加法原理、乘法原理、组合数排列数的求法、乘法逆元)
  20. 手机QQ公众号亿级消息实时群发架构

热门文章

  1. 配置方法_怎么查看电脑配置?三个方法学起来
  2. argc 和 argv
  3. FPGA-全局时钟缓冲IBUFG BUFG IBUFGDS ODDR2
  4. Scala学习笔记(三)——面向对象、类、抽象类、伴生、内部类、样例类、枚举、泛型类、类型边界、型变、特质、动态混入、包
  5. 浏览器的 5 种 Observer,你用过几种?
  6. HEAD区元素的整理
  7. 双11前夕 不做好直通车ROI就输了
  8. js中怎么使用php代码高亮,PHP_如何实现正则表达式的JavaScript的代码高亮,今天想改一下JS的高亮的配色 - phpStudy...
  9. JavaWeb开发环境搭建
  10. 13 某知名网站测试实战