Nói chung timeGetTime () là tốt nhất cho logic trò chơi thời gian - GetTickCount không có độ phân giải khá cao và QPC & RDTSC gặp nhiều rắc rối hơn so với giá trị của mục đích đó.
Mặt khác, để định hình, RDTSC hoặc QPC có thể khá đáng giá. Tôi thích RDTSC hơn QPC, mặc dù microsoft khuyến nghị QPC.
Bốn chức năng thời gian phổ biến tôi sử dụng trên win32:
GetTickCount () trả về thời gian hiện tại tính bằng mili giây so với số không tùy ý (thông thường, mặc dù không phải lúc nào cũng là thời gian khởi động hệ thống), dưới dạng số nguyên 32 bit (do đó, nó sẽ kết thúc sau mỗi 49 ngày hoặc lâu hơn). Nó thường là phương pháp nhanh nhất để đo thời gian. Thật không may, nó có độ phân giải thấp - thông thường nó chỉ cập nhật 64 lần mỗi giây. Trái với tin đồn phổ biến, việc gọi timeBeginPeriod (1) sẽ không tăng độ phân giải trên bất kỳ hệ thống nào tôi đã thử nghiệm trên đó. Ngoài ra còn có một biến thể 64 bit nếu bạn lo lắng về nó.
timeGetTime () trả về thời gian hiện tại tính bằng mili giây so với một số 0 tùy ý, dưới dạng giá trị 32 bit (do đó, nó sẽ kết thúc sau 49 ngày hoặc lâu hơn). Nó không nhanh như GetTickCount, nhưng vẫn khá hợp lý. Nó có thể chính xác đến một mili giây, mặc dù điều đó có thể yêu cầu gọi timeBeginPeriod (1) trước. Sử dụng timeGetTime yêu cầu liên kết với winmm.lib và bao gồm Mmsystem.h.
QueryPerformanceCorer () trả về thời gian hiện tại theo các đơn vị tùy ý dưới dạng số nguyên 64 bit. Bạn có thể tìm ra các đơn vị là gì bằng cách gọi QueryPerformanceFrequency () và các đơn vị sẽ không thay đổi (vắng mặt khi khởi động lại). Việc triển khai cơ bản của điều này rất khác nhau và mỗi lần thực hiện đều có những lỗi và lỗi riêng có thể xảy ra trên một số phần cứng, khiến việc này trở nên đáng ghét khi sử dụng trong các ứng dụng được triển khai rộng rãi. Một số triển khai rất chậm, một số khác thì hợp lý, mặc dù không triển khai nhanh như GetTickCount hoặc thậm chí timeGetTime. Thông thường độ phân giải thời gian tốt hơn 1 micro giây, mặc dù không nhất thiết phải tốt hơn nhiều.
RDTSC là một opcode ngôn ngữ lắp ráp x86 / x64 trả về thời gian hiện tại theo đơn vị chu kỳ CPU (nghĩa là số nguyên 64 bit. Trên một số trình biên dịch, nó có thể được truy cập dưới dạng nội tại (__rdstc), trên các trình biên dịch khác, bạn sẽ cần mã asm nội tuyến. Tốc độ của nó thay đổi một chút giữa các CPU nhưng thường khá hợp lý - thường nhanh hơn đáng kể so với QueryPerformanceCorer nhưng không nhanh bằng GetTickCount. Đôi khi, nó có thể chạy ngược trên CPU đa lõi khi bạn chuyển đổi lõi do đồng bộ hóa không hoàn hảo giữa các lõi, các đơn vị rất khó để tìm ra và các đơn vị có thể thay đổi trong thời gian giữa do quản lý năng lượng thay đổi tốc độ của xung nhịp CPU.
Lưu ý rằng mỗi phương thức trong số bốn phương pháp này có thể trôi tương đối so với ba phương pháp kia - không có dòng chảy thời gian có thẩm quyền rõ ràng.