timeEndPeriod是否恢复上一个或默认值?

时间:2014-01-17 14:11:28

标签: c++ c windows winapi

假设默认计时器分辨率为15ms。鉴于这种情况:

Process A calls timeBeginPeriod(1);
Now timer resolution is 1ms.
Process B calls timeBeginPeriod(2);
Now timer resolution is 2ms.
Process B calls timeEndPeriod(2);

那么计时器分辨率是多少?它会回落到1或15毫秒吗?

让我们稍微修改一下场景:

Process A calls timeBeginPeriod(1);
Now timer resolution is 1ms.
Process B calls timeBeginPeriod(2);
Now timer resolution is 2ms.
Process A calls timeEndPeriod(1);

现在什么是计时器分辨率?在进程B调用timeEndPeriod(2)之前它是否保持2ms?

1 个答案:

答案 0 :(得分:3)

来自MSDN:

  

Windows使用任何进程请求的最低值(即最高分辨率)。

假设您的流程是唯一可以调用timeBeginPeriod()的流程,那么:

  

问:什么是计时器分辨率呢?它会回落到1或15毫秒吗?

它没有改变,因为1毫秒(过程A需要的)是最低分辨率(然后是应用的分辨率)。所以答案是:它是1毫秒,当进程B发出请求时它没有改变,因为它是一个全局设置,然后应用了最严格(最低)的一个。

  

问:现在什么是计时器分辨率?在进程B调用timeEndPeriod(2)之前它是否保持2ms?

是的,因为现在所需的最低分辨率是2毫秒,所以系统会在调用timeEndPeriod(2)之前尊重该请求。