c++, usleep () est obsolète, workarounds pour Windows/MingW?

j'ai déjà découvert avec une autre question que Windows / MingW ne fournit pas les alternatives nanosleep() et setitimer() au usleep () obsolète. Mais mon but est de corriger tous les avertissements que cppcheck me donne, y compris les avertissements de style usleep ().

alors, y a-t-il une solution pour éviter d'une façon ou d'une autre usleep() sur Windows sans en utilisant cygwin ou en installant des charges de nouvelles dépendances / bibliothèques? Grâce.

17
demandé sur Kara 2011-04-27 13:15:42

6 réponses

usleep() fonctionne avec des microsecondes. Dans windows pour obtenir la microseconde précession, vous devez utiliser QueryPerformanceCounter () fonction winapi. Ici vous pouvez trouver comment obtenir cette lésion en l'utilisant.

-4
répondu Mihran Hovsepyan 2011-04-27 09:26:59

j'ai utilisé ce code (à l'origine de ici):

#include <windows.h>

void usleep(__int64 usec) 
{ 
    HANDLE timer; 
    LARGE_INTEGER ft; 

    ft.QuadPart = -(10*usec); // Convert to 100 nanosecond interval, negative value indicates relative time

    timer = CreateWaitableTimer(NULL, TRUE, NULL); 
    SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0); 
    WaitForSingleObject(timer, INFINITE); 
    CloseHandle(timer); 
}

Notez que SetWaitableTimer() utilise "