这是一个检查睡眠()的功能的示例function.This仅是一个演示,因为iam在我的应用程序开发中使用了这个睡眠()和时钟()函数。
// TestTicks.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
int i, i2;
i = clock();
//std::cout<<" \nTime before Sleep() : "<<i;
Sleep(30000);
i2 = clock();
//std::cout<<" \nTime After Sleep() : "<<i2;
std::cout<<"\n Diff : "<<i2 -i;
getchar();
return 0;
}在这段代码中,我使用clock()计算睡眠函数前后的时间。因为我使用的是睡眠( 30000 ),所以时间差至少是30000。
我已经运行这个程序很多次了。打印输出为30000、30001、30002。这些都是可以的。但有时我会得到像29999和29997这样的值,这是怎么可能的,因为我在时钟()中设置了30000睡眠b/w。
请告诉我这样做的原因。
发布于 2012-03-22 23:18:56
根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx的说法
系统时钟以恒定的速率“滴答作响”。如果dwMilliseconds小于系统时钟的分辨率,则线程休眠的时间可能少于指定的时间长度。如果dwMilliseconds大于一个刻度但小于两个刻度,等待时间可以介于一个刻度到两个刻度之间,依此类推。
这只意味着休眠函数永远不会精确地休眠给定的时间量,而是在给定调度器的分辨率的情况下尽可能接近休眠。
同一页面为您提供了一种提高计时器分辨率的方法,如果您确实需要的话。
还有一些high resolution timers可能更适合您的需求。
发布于 2012-03-22 23:17:35
除非您使用的是实时操作系统,否则这是非常值得期待的。
操作系统必须调度和运行许多其他进程,因此唤醒您的进程可能与您想要睡眠的确切时间不匹配。
发布于 2012-07-13 23:07:20
clock()函数告诉调用进程使用了多少处理器时间。
您可以将clock()的用法替换为函数GetSystemTimeAsFileTime,以便更准确地测量时间。
此外,您可以尝试将timeBeginPeriod与timeGetDevCaps调用返回的wPeriodMin一起使用,以获得最大中断频率。
为了使休眠与系统中断周期同步,我还建议在第一次“时间捕获”之前进行一次休眠。
通过这样做,“太短”就会消失。
有关睡眠的更多信息,请访问here。
https://stackoverflow.com/questions/9825135
复制相似问题