Gettimeofday() mikrosaniye çözünürlük garantisi?
Aslında win 32 API için yazılmış bir oyun,, Linux (OS X win 32 port Linux taşıma) taşıma kendimi buluyorum. İşlemi başlatmak beri uSeconds vererek QueryPerformanceCounter uyguluyorum:
BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount)
{
gettimeofday(¤tTimeVal, NULL);
performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec);
performanceCount->QuadPart *= (1000 * 1000);
performanceCount->QuadPart = (currentTimeVal.tv_usec - startTimeVal.tv_usec);
return true;
}
Bu, QueryPerformanceFrequency() frekans olarak sürekli 1000000 verilmesi ile birleştiğinde, iyi çalışıyorbenim makinedebana programın başından beri uSeconds içeren 64 bitlik bir değişken vererek. Bu yüzdenbu taşınabilir mi?Eğer çekirdek, belirli bir yol ya da buna benzer bir şey derlendi farklı çalışır keşfetmek istemiyorum. Bu iyi bir şey Linux dışında olmayan taşınabilir olması, ancak duyuyorum.
CEVAP
Belki. Ama daha büyük sorunların var. gettimeofday() zamanlayıcı (yani, ntpd değiştiren sistem süreçleri eğer orada yanlış zamanlara neden olabilir. Bir "" linux olsa da, gettimeofday() çözünürlük 10us. sanırım normal İleri ve geri ve zaman, sonuç olarak, süreçleri sistem üzerinde çalışan temel atlama olabilir. Bu etkili bir şekilde sorunuza hayır cevabını yapar.
Zamanlama aralıkları için clock_gettime(CLOCK_MONOTONIC) içine bakmak gerekir. Birkaç daha az sorunları çok çekirdekli sistemler ve harici saat ayarları gibi şeyler nedeniyle muzdarip.
Ayrıca, clock_getres() işlevi içine bak.

Maven diyor&; çözünürlük Kod: güncelle...
Linux ölçmek zaman vs vs vs clock_gett...
Kapibara Belirsizlik Çözünürlük...
Düzensiz delik tipi çözünürlük...
Çözünürlük C ve Linux ile zamanlayıcı ...