SORU
1 AĞUSTOS 2008, Cuma


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
1 AĞUSTOS 2008, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • J Medema

    J Medema

    11 EKİM 2006
  • MW Technology

    MW Technolog

    28 EKİM 2009
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005