您的位置:首页 > 编程语言 > Qt开发

Qt 使用Windows API 函数精确控制循环执行的周期时间

2016-05-20 14:11 477 查看
有时我们的线程是一个while()或for()的死循环,如果希望每隔固定时间循环执行一次,即实现固定周期的循环执行,则需要以下代码

#define CYCLE_PERIOD100 /*固定周期宏定义,单位为毫秒 */

LARGE_INTEGER   litmp; 

LONGLONG QStart,QEnd;

double dfSecond, dfFreq, dfTim; 

int tm;

QueryPerformanceFrequency(&litmp); 

dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QStart = litmp.QuadPart;// 获得初始值

while(1)

{
dfTim=0;
tm=0;
QueryPerformanceCounter(&litmp);
QEnd = litmp.QuadPart;//获得终止值
dfSecond = (double)(QEnd-QStart);
dfTim = dfSecond / dfFreq*1000;// 获得对应的时间值,单位为毫秒
tm=(int)(CYCLE_PERIOD - dfTim);
if(tm>0) 
msleep(tm);
else
qDebug("WARN:cyctime %d >= cycperiod %d!",dfTim,CYCLE_PERIOD);
QueryPerformanceCounter(&litmp);

QStart = litmp.QuadPart;// 获得初始值

/*………………………………*/

/*  自己需要循环执行的代码  */

/*………………………………*/



说明:这里每个循环先将上次的剩余时间msleep掉,保证每次循环运行的时间固定, 注意msleep操作不要放在循环的最后,避免由于循环中的continue导致sleep不执行,当然这样写也有一个小问题,就是循环第一次运行时要先延时一个周期的时间,不过这在绝大部分程序中是没有任何影响的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: