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

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • Good Creative Academy

    Good Creativ

    19 Kasım 2009
  • lilstevie89

    lilstevie89

    25 Mart 2011