Sleep()函数用法

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睡眠时钟().

请告诉我原因.

Sir*_*ius 5

根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx:

系统时钟以恒定速率"滴答".如果dwMilliseconds小于系统时钟的分辨率,则线程可能会睡眠时间少于指定的时间长度.如果dwMilliseconds大于一个tick但小于2,则等待可以是一到两个滴答之间的任何位置,依此类推.

它只是意味着Sleep函数永远不会在给定的时间内完全睡眠,但考虑到调度程序的分辨率,它尽可能接近.

如果您真的需要,同一页面为您提供了增加计时器分辨率的方法.

还有高分辨率计时器可以更好地满足您的需求.