Ane*_*nan 7 c++ sleep timing clock
这是一个检查Sleep()函数功能的示例pgm.这是一个演示,因为我在我的app开发中使用了这个sleep()和clock()函数.
// 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;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我在睡眠功能之前和之后使用clock()来计算时间.由于iam使用sleep(30000),时间差异至少为30000.
我已多次运行此prgm.打印输出为30000,30001,30002.这些都可以.但有时我得到像29999和29997这样的值.这怎么可能,因为我把30000睡眠时钟().
请告诉我原因.
根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx:
系统时钟以恒定速率"滴答".如果dwMilliseconds小于系统时钟的分辨率,则线程可能会睡眠时间少于指定的时间长度.如果dwMilliseconds大于一个tick但小于2,则等待可以是一到两个滴答之间的任何位置,依此类推.
它只是意味着Sleep函数永远不会在给定的时间内完全睡眠,但考虑到调度程序的分辨率,它尽可能接近.
如果您真的需要,同一页面为您提供了增加计时器分辨率的方法.
还有高分辨率计时器可以更好地满足您的需求.