Tôi đang chuyển một trò chơi, vốn được viết cho Win32 API, sang Linux (tốt, chuyển cổng OS X của cổng Win32 sang Linux).
Tôi đã triển khai QueryPerformanceCounter
bằng cách đưa ra uSeconds kể từ khi quá trình bắt đầu:
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;
}
Điều này, cùng với QueryPerformanceFrequency()
việc đưa ra tần số 1000000 không đổi, hoạt động tốt trên máy của tôi , mang lại cho tôi một biến 64-bit chứa uSeconds
từ khi chương trình khởi động.
Vậy cái này có phải hàng xách tay không? Tôi không muốn phát hiện ra nó hoạt động khác đi nếu hạt nhân được biên dịch theo một cách nhất định hoặc bất cứ điều gì tương tự. Tuy nhiên, tôi hài lòng với việc nó không di động đối với một thứ gì đó khác ngoài Linux.