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); 可以延时,但也会阻塞线程
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 延时处理的几种办法相关推荐
- Qt延时处理的四种方法
Qt延时处理的四种方法 这里提供四种方法: 1. 多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait( ...
- qt延时 QT中简单的延时办法
来自 http://www.qtgtk.com/qt延时-qt中简单的延时办法/ QEventLoop eventloop; QTimer::singleShot(time, &eventlo ...
- Qt延时和startTimer
Qt延时的几种用法 一.常用延时方式 #include <QTimer> #include <QThread> #include <QDateTime>int ms ...
- qt模拟键盘的三种实现方式(思路+demo)
转载:http://www.360doc.com/content/13/1122/15/6828497_331303961.shtml 按照我自己的理解,qt模拟键盘分三个层次的模拟. 1.单线程的模 ...
- eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...
eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样 第一种说法: 还真的找到解决的方法了, ...
- WinAPI: SetRect 及初始化矩形的几种办法
为什么80%的码农都做不了架构师?>>> 本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messa ...
- php 怎么防注入,php 防止注入的几种办法
php教程 防止注入的几种办法 其实原来就是我们需要过滤一些我们常见的关键字和符合如: select,insert,update,delete,and,*,等等 例子: function inject ...
- 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...
应用场景 下图幻灯片中第一排为插入流程图形状"过程""数据""终止"时的默认样式,默认样式中形状填充色为蓝色,形状内文字为等线18号.如果我 ...
- php怎么随机生成二个中文,PHP生成随机字符串的两种办法
通常情况下,生成一个随机字符串,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度. 本文介绍两种生成随机字符串的办法 ...
最新文章
- centOS 7 安装man中文版手册
- x3650m5不自动进系统_17日起,泉州这个地方自动抓拍系统启用!这些车闯红灯、严重超载、不按道行驶被查处曝光!【交通大整治】...
- Html内联定义特点,HTML5
- html中padding和margin的区别和用法与存在的bug消除
- 剑指offer之求1+2+...+n
- Android四大组件---BroadcastReceiver
- 图片上传的ajax代码,一个伪ajax图片上传代码的例子
- Java开发新手经常遇到的一些问题
- React入门第一天(绑定事件,动态渲染,修改样式、传参)
- DEA用法(1)--三阶段DEA模型与DEAP使用方法教程
- 关于MacOS升级10.13系统eclipse菜单灰色无法使用解决方案
- centos 7 iso u盘安装_树莓派Raspberry Pi 4B安装VMware ESXi
- java设置列宽_java用POI设置Excel的列宽
- 任小龙 mysql笔记_任小龙java基础的Excel笔记(完整版)
- Latex 宏定义中 \relax
- 银河麒麟/ubuntu 下安装/卸载软件包命令大全
- KNN算法和Kernel KNN算法的区别
- 3344avd_AVD生根
- AcWing 1309. 车的放置 (加法原理、乘法原理、组合数排列数的求法、乘法逆元)
- 手机QQ公众号亿级消息实时群发架构
热门文章
- 配置方法_怎么查看电脑配置?三个方法学起来
- argc 和 argv
- FPGA-全局时钟缓冲IBUFG BUFG IBUFGDS ODDR2
- Scala学习笔记(三)——面向对象、类、抽象类、伴生、内部类、样例类、枚举、泛型类、类型边界、型变、特质、动态混入、包
- 浏览器的 5 种 Observer,你用过几种?
- HEAD区元素的整理
- 双11前夕 不做好直通车ROI就输了
- js中怎么使用php代码高亮,PHP_如何实现正则表达式的JavaScript的代码高亮,今天想改一下JS的高亮的配色 - phpStudy...
- JavaWeb开发环境搭建
- 13 某知名网站测试实战