This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SOLVED] Re: does usleep() sleep more than it's supposed to?


Brian Ford wrote:
Put this in its own (separate from all Cygwin code) object file, call
it before any timing calls in your application, and link it with -lwinmm:

#include "windows.h"

void
SetSchedulerMaxRes(void)
{
    TIMECAPS tc;

    /* Set the system scheduler resolution to its maximum.
     * Needed for Cygwin >= 1.5.20, broken in 1.5.19, and unnecessary
     * <= 1.5.18 because it was always done by Cygwin.  Required for */
    if (timeGetDevCaps(&tc, sizeof(tc)) != TIMERR_NOERROR)
    {
        printf("timeGetDevCaps error %d\n", GetLastError());
        tc.wPeriodMin = 1; /* Try 1 ms and hope for the best */
    }

    if (timeBeginPeriod(tc.wPeriodMin) != TIMERR_NOERROR)
        printf("timeBeginPeriod error %d\n", GetLastError());
}



Impressive.


I never knew about timeGetDevCaps nor timeBeginPeriod but this improved the sleep time by making it accurate up to 1000 microseconds, which *is* the behavior I've been looking for for weeks now.

Here's the new output on my box:

$ ./a.exe
Print elapsed time at every call to usleep()
Elapsed time (sec:microsec) 0:100000
Elapsed time (sec:microsec) 0:101000
Elapsed time (sec:microsec) 0:100000
Elapsed time (sec:microsec) 0:101000
Elapsed time (sec:microsec) 0:101000
Elapsed time (sec:microsec) 0:100000
Elapsed time (sec:microsec) 0:101000
Elapsed time (sec:microsec) 0:100000
Elapsed time (sec:microsec) 0:101000
Elapsed time (sec:microsec) 0:100000

Print elapsed after the loop()
Elapsed time (sec:microsec) 1:26000




Thank you very much.


Best Regards,

Carlo



--
Carlo Florendo
Softare Engineer/Network Co-Administrator
Astra Philippines Inc.
UP-Ayala Technopark, Diliman 1101, Quezon City
Philippines
http://www.astra.ph

Member of the Astra Group of Companies
5-3-11 Sekido, Tama City
Tokyo 206-0011, Japan
http://www.astra.co.jp

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]