Tak więc uruchamiam grę, która została oryginalnie napisana dla Win32 API, do Linuksa (cóż, portowanie portu OS X portu Win32 na Linuksa). I wprowadziły QueryPerformanceCounter
przez podanie uSeconds ponieważ proces uruchamiania:Czy gettimeofday() ma gwarantowaną mikrosekundową rozdzielczość?
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;
}
To, w połączeniu z QueryPerformanceFrequency()
podając stałą 1000000 jak częstotliwość, działa dobrze na moim komputerze, dając mi zmiennej 64 bitowej, który zawiera uSeconds
od czasu uruchomienia programu. Tak więc jest przenośny? Nie chcę odkryć, że działa inaczej, jeśli kernel został skompilowany w określony sposób lub coś w tym stylu. Nie przeszkadza mi to, że jest nieprzenośny na coś innego niż Linux.
clock_gettime występuje tylko w najnowszym systemie Linux. inny system ma tylko gettimeofday() –
@ vitaly.v.ch to POSIX, więc nie jest to tylko Linux i "nowicjusz"? nawet dystrybucje "Enterprise", takie jak Red Hat Enterprise Linux, oparte są na wersji 2.6.18, która ma clock_gettime, więc nie, niezbyt nowa.(data strony man w RHEL to 2004-marzec-12, więc jest już od jakiegoś czasu) chyba że mówisz o NAPRAWDĘ FREAKING OLD Jądra WTF masz na myśli? – Spudd86
clock_gettime został włączony do POSIX w 2001 roku. O ile mi wiadomo obecnie clock_gettime() zaimplementowany w Linuksie 2.6 i qnx. ale Linux 2.4 jest obecnie używany w wielu systemach produkcyjnych. –