OS: Windows 7WinAPI sonno() chiamata di funzione dorme più a lungo del previsto
Quando si chiama la funzione WinAPI sonno() come Sonno (1) il filo in realtà dorme per 15ms. L'ho fatto 100 volte in un ciclo e il tempo di sospensione totale era 1500ms invece di 100.
È questo comportamento comune o devo essere incentrato su qualcosa che non va con il mio MOBO, CPU, installazione di Windows?
MODIFICA: se possibile, è possibile eseguire questo codice e pubblicare per quanto tempo è stato il periodo di sospensione. Lascio che un mio amico lo faccia, e in realtà ha avuto tutto a 1 ms.
#include <iostream>
#include <ctime>
#include <Windows.h>
void test(void)
{
std::cout << "Testing 1ms sleep." << std::endl;
for (unsigned int i = 0; i < 10; i++)
{
std::clock_t startClocks = std::clock();
Sleep(1);
std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Time: " << clocksTaken << "ms." << std::endl;
}
}
int main(void)
{
test();
std::cin.sync();
std::cin.get();
return 0;
}
EDIT2: Sembra che il motivo per cui alcune persone stanno ottenendo 1ms è che qualche altro programma è in esecuzione che imposta la risoluzione del timer a livello di sistema a 1ms. Per impostazione predefinita, dovrebbe essere 15.6ms su Windows 7.
Dal sonno può facilmente prendere un orario diverso a seconda di vari fattori (l'hardware/sto funzionando, il carico del processore in quel momento ecc.) Non sono sicuro di cosa speri di ottenere chiedendo alle persone di eseguire quel codice. Sarebbe perfettamente possibile che emetta un tempo diverso per ogni iterazione del ciclo, ogni volta che viene eseguito. – obmarg
Non penso che Sleep() sia specifico dell'hardware su Windows. Se non utilizzi programmi che utilizzano timeBeginPeriod(), i risultati dovrebbero essere 15-16ms. Ad esempio: Windows Media Player lo imposta su 10 ms e BSPlayer su 1 ms. È stato anche detto che alcuni browser lo regolano. – NFRCR
Forse non è collegato direttamente, ma potrebbe esserci comunque un collegamento indiretto: se stai usando Windows su una macchina molto sottodimensionata, il carico salirà e potrebbe anche passare il tempo prima che il sonno ritorni. – obmarg