Sleep()函数用法
Sleep() function usage
这是一个用于检查Sleep()函数功能的示例pgm。这只是一个演示,因为我在应用程序开发中使用了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;
}
在这段代码中,我使用clock()计算sleep函数前后的时间。由于iam使用睡眠(30000),因此时间差至少为30000。
我已经运行这个程序很多次了。打印输出为300003000130002。这些都可以。但有时我会得到像29999和29997这样的值。这怎么可能呢,因为我把30000睡眠b/w放在了时钟()上。
请告诉我原因。
根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx:
系统时钟以恒定的速率"滴答"作响。如果dwMilliseconds小于系统时钟的分辨率,则线程的睡眠时间可能小于指定的时间长度。如果dwMilliseconds大于一个刻度但小于两个刻度,则等待可以在一到两个刻度之间,依此类推
这只是意味着睡眠功能永远不会在给定的时间内完全睡眠,但在调度器的分辨率下尽可能接近。
如果你真的需要,同一页提供了一种提高计时器分辨率的方法
还有高分辨率定时器,可能更适合您的需求。
除非您使用的是实时操作系统,否则这是意料之中的事。
操作系统必须安排和运行许多其他进程,所以唤醒你的进程可能与你想要睡觉的确切时间不匹配。
clock()函数告诉调用进程使用了多少处理器时间。
您可以将clock()的使用替换为函数GetSystemTimeAsFileTime以便更准确地测量时间。
此外,您可以尝试将timeBeginPeriod与调用timeGetDevCaps返回的wPeriodMin一起使用,以获得最大中断频率。
为了使睡眠与系统中断时间同步,我还建议在第一次"时间捕捉"之前进行睡眠(1)。
这样一来,"短裤"就会消失。
有关计数睡眠的更多信息可以在这里找到
#include <iostream>
#include <time.h>
void wait(int seconds)
{
int endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait){}
}
int main()
{
wait(2);
cout<<"2 seconds have passed";
}
- 构造函数的用法
- C++ 中函数中 Const 用法之间的差异
- 错误:使用复制和交换习惯用法的交换函数中"operator="的重载不明确
- 未命名的函数参数用法
- 使用指针复制构造函数用法
- CPP/C 中的常量用法和结构构造函数中的澄清
- 向下转换指向成员函数的指针.这是合法用法吗?
- 将 PIMPL 习惯用法与成员函数模板一起使用(无需预先了解所有可能的数据类型)
- 复制构造函数方法的用法
- C++向量用法错误:没有匹配的成员函数来调用"push_back"
- Constexpr静态成员函数用法
- 函数原型范围的有趣用法
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 参数和成员变量在构造函数中的用法
- C 中的构造函数和破坏者的内联用法
- unique_ptr旧函数的用法
- 函数调用中“&”的用法,令人困惑
- 使用复制和交换习惯用法,复制对象的析构函数如何不解除分配指向内存
- 如何嵌入实时单元测试函数的主体作为 Doxygen 的示例用法
- C++析构函数删除包含动态数组作为数据成员的对象时的用法