Quando si attende un evento non segnalato utilizzando la funzione WaitForSingleObject, in alcuni casi la chiamata restituirà WAIT_TIMEOUT in meno del periodo di timeout specificato. Semplicemente collegando la chiamata con un timeout impostato su 1000ms, ho visto il ritorno della chiamata in periodi a partire da 990ms (in esecuzione su WinXP). Sto usando QueryPerformanceCounter per ottenere una misurazione del tempo indipendente dall'orologio di sistema, quindi non penso che la deriva del clock sia probabilmente una risposta.Timeout risoluzione di WaitForSingleObject
Questo comportamento non presenta problemi pratici per me, ma mi piacerebbe capirlo meglio. Sembra che funzioni all'incirca alla risoluzione di un tick del timer. Microsoft pubblica ulteriori dettagli sulla precisione di questa funzione? Dovrei aspettarmi maggiore precisione in Vista?
Vorrei suggerire un piccolo test: basta mettere un 'sleep (0)' prima della funzione wait. Questo è molto probabile che cambi il comportamento per soddisfare le tue aspettative. Inoltre: la conversione dei risultati di 'QueryPerformanceCounter()' in valori temporali utilizzando la sua frequenza restituita da 'QueryPerformanceFrequency()' implica che la frequenza sia precisa. La frequenza data viene trattata come una costante. Ma l'hardware non finalizzato ha tolleranze. La frequenza ha sempre un offset e forse anche deriva termica. – Arno