Mail Archives: cygwin/2012/03/27/17:29:08
Corinna Vinschen wrote:
> On Mar 27 20:59, Christian Franke wrote:
>> Corinna Vinschen wrote:
>>> On Mar 27 20:01, Christian Franke wrote:
>>>> Corinna Vinschen wrote:
>>>>> On Mar 26 19:00, Christian Franke wrote:
>>>>>> Corinna Vinschen wrote:
>>>>>>> I see your point, but what bugs me a bit is the fact that
>>>>>>> clock_getres(CLOCK_REALTIME) and clock_setres(CLOCK_REALTIME) will
>>>>>>> always return the same value coarsest, regardless what value has been set.
>>>>>> If clock_setres was called and succeeded, then clock_getres(.)
>>>>>> should return the value set before.
>>>>>>
>>>>>> If clock_setres was not called, the coarsest value is IMO the only
>>>>>> value that can be guaranteed.
>>>>>>
>>>>>> The actual value returned by NtQueryTimerResolution is simply
>>>>>> useless in this context: It is the minimum of all resolutions
>>>>>> currently set by all running processes. It may change at any time.
>>>>>> There is apparently no way the query the current setting of the
>>>>>> current process.
>>>>> Uh, right, I misunderstood. I reverted the change to clock_setres.
>>>> Sorry, I probably forgot to mention that NtSetTimerResolution
>>>> returns the same useless actual value than NtQueryTimerResolution.
>>>>
>>>> I would suggest:
>>>>
>>>> status = NtSetTimerResolution (period, TRUE,&actual);
>>>> if (!NT_SUCCESS (status))
>>>> { ... return -1; }
>>>> - minperiod = actual;
>>>> + minperiod = period;
>>> But that's not right. The "actual" value is not useless, but the value
>>> the resolution has actually been set to.
>> No, again this is the minimum of all resolutions currently set by
>> all processes.
>>
>>
>>> The OS just doesn't support
>>> arbitrary values for the period.
>>>
>> Yes - but in 'actual' a smaller value than the value set for the
>> current process may be returned.
> Hmpf, ok. Boy is that ugly.
Yes, aka broken by design :-)
There should be a function to query the actual setting for the current
process only. But there is none.
> Is there a chance that actual is bigger
> than period? In that case we should perhaps set minperiod like this:
>
> minperiod = MAX (actual, period);
According to some experiments this can only happen if period < finest.
In this case NtSetTimerResolution also succeeds and returns actual ==
finest.
Christian
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -