Dotarłem więc do kodu źródłowego, który wygląda następująco:
static cell AMX_NATIVE_CALL _tickcount(AMX *amx, cell *params)
{
// #if defined __WIN32__ || defined _WIN32
// static int timerset = 0;
// #endif
cell value;
assert(params[0]==sizeof(cell));
//#if defined __WIN32__ || defined _WIN32
// if (!timerset) {
// timeBeginPeriod(1); /* timeGetTime() is more accurate on WindowsNT
// * if timeBeginPeriod(1) is set */
// timerset=1;
// } /* if */
// value=timeGetTime(); /* this value is already in milliseconds */
// #else
value=(cell)clock();
/* convert to milliseconds */
value=(cell)((1000L * (value+CLK_TCK/2)) / CLK_TCK);
//#endif
return value;
}
Kod jest dość mocno nieczytelny, dużo komentarzy, jednak z tego, co zrozumiałem,
funkcja przyjmuje początkowo wartość ⌊-232-1/106⌋ i co cykl zegara ulega inkrementacji aż do ⌊(232-1-1)/106⌋, po czym tickcount przekracza wartość INT i wraca do wartości minimalnej.
Opisałem to w dokumentacji: tickcount, jednak nie wiem w jaki sposób funkcja zachowa się serwerów HLDS pracujących na architekturach 64 bitowych, do tego nie mam jak tego przetestować.
I tu wychodzę z zapytaniem, czy wynik rzutowania wyniku na zmienną całkowitoliczbową w architekturze 64 bitowej będzie inny, niż w przypadku architektury 32 bitowej i jeśli tak, to jakie będzie ekstremum funkcji tickcount?
Użytkownik Benio101 edytował ten post 28.03.2013 18:20
drobne techniczne