首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >睡眠不准确吗?

睡眠不准确吗?
EN

Stack Overflow用户
提问于 2013-10-17 12:40:49
回答 3查看 1.2K关注 0票数 3

我正在研究一个计时系统,我将实现一个计时器类。

代码语言:javascript
运行
复制
#include <windows.h>
#include <stdio.h>
#include <time.h>

int main()
{
    clock_t t1, t2;
    t1 = clock();
    Sleep(10);
    t2 = clock();
    printf("%i\n", (int)(t2 - t1));
    return 0;
}

这个程序应该打印"10“,但它打印"15”或"16“。我需要更准确,这是不到1毫秒!有什么建议吗?(也许是select()的超时?)

注意:我已经在Windows7终极x86上运行了这个程序。用MinGW (C/C++) x86编写的程序。

NOW I THINK >>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-17 12:47:28

睡眠()对操作系统的时钟中断率是准确的。默认情况下,在Windows上每秒运行64次。或者每15.625毫秒一次,就像你发现的那样。

你可以提高这个速率,打电话给timeBeginPeriod(10)。完成后使用timeEndPeriod(10)。您仍然受制于正常的线程调度延迟,因此仍然无法保证线程在10毫秒后恢复运行。当机器装得很重的时候就不会了。使用SetThreadPriority()来提高优先级,增加它的可能性。

票数 4
EN

Stack Overflow用户

发布于 2013-10-17 12:52:15

你的问题是,“时钟”每秒只滴答64次(我看到的系统可以达到2000,但没有更高)。如果您正在创建一个timer类,您可能希望获得比2000更高的分辨率。使用QueryPerformanceCounter获得更高的分辨率。有关示例,请参见QueryPerformanceCounter and overflows

请注意,如果您希望睡眠时间很短,则必须在一个紧循环中调用QueryPerformanceCounter

票数 2
EN

Stack Overflow用户

发布于 2013-10-17 12:47:56

睡眠()按你想要的方式是不准确的。

它将导致线程至少在指定的时间内休眠,但不能保证操作系统会在指定的时间返回对线程的控制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19427034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档