Tôi đang viết một ứng dụng C++/SDL/OpenGL và tôi đã có lỗi đặc biệt nhất. Trò chơi dường như hoạt động tốt với một dấu thời gian biến đổi đơn giản. Nhưng sau đó FPS bắt đầu hành xử kỳ lạ. Tôi đã tìm ra rằng cả Sleep (1) và SDL_Delay (1) mất 15 ms để hoàn thành.Ngủ (1) và SDL_Delay (1) mất 15 ms
Bất kỳ đầu vào những chức năng giữa 0-15 mất 15ms để hoàn thành, khóa FPS vào khoảng 64. Nếu tôi đặt nó là 16, phải mất 30 MS o.o
Tôi không có ý tưởng tại sao điều này đang xảy ra. Đây là lỗi kỳ lạ nhất mà tôi từng gặp phải.
vòng lặp của tôi trông như thế này:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
Nó sẽ rất hiếm khi mất 1ms khi nó được yêu cầu, nhưng phần lớn thời gian phải mất 15ms.
Hệ điều hành của tôi là các cửa sổ 8.1. CPU là một i7 intel. Tôi đang sử dụng SDL2. Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao vì tôi không biết gì.
có thể trùng lặp của [WinAPI Sleep() chức năng ngủ lâu hơn mong đợi] (http://stackoverflow.com/questions/9518106/winapi-sleep-function- call-sleeps-for-longer-than-expected) –
Bạn không muốn đặt một thread/process để ngủ nếu bạn mong đợi nó thức dậy trong thời gian thực. Sử dụng một spinlock nếu bạn không muốn lo lắng về việc lập kế hoạch. –