लेता है मैं एक सी ++/एसडीएल/ओपनजीएल आवेदन लिख रहा हूं, और मेरे पास सबसे असाधारण बग है। यह गेम एक साधारण परिवर्तनीय टाइमस्टेप के साथ ठीक काम कर रहा था। लेकिन फिर एफपीएस ने अजीब तरीके से व्यवहार करना शुरू कर दिया। मुझे पता चला कि दोनों नींद (1) और एसडीएल_Delay (1) पूरा करने के लिए 15 एमएस लेते हैं।नींद (1) और एसडीएल_Delay (1) 15 एमएस
किसी भी इनपुट उन कार्यों में 0-15 के बीच पूरा करने के लिए 15ms लेता है, 64 के बारे में में एफपीएस ताला लगा अगर मैं 16 के लिए सेट है, यह 30 एमएस o.o
मैं कोई विचार क्यों यह हो रहा है है लेता है। यह सबसे अजीब बग है जिसे मैंने कभी सामना किया है।
मेरे पाश इस तरह दिखता है:
while (1){
GLuint t = SDL_GetTicks();
Sleep(1); //or SDL_Delay(1)
cout << SDL_GetTicks() - t << endl; //outputs 15
}
यह बहुत मुश्किल से ही 1ms लेने के रूप में यह माना जाता है, लेकिन समय के बहुमत यह 15ms लेता है।
मेरा ओएस विंडोज 8.1 है। सीपीयू एक इंटेल i7 है। मैं एसडीएल 2 का उपयोग कर रहा हूँ। किसी भी विचार की सराहना की जाएगी, क्योंकि मैं अनजान हूं।
संभावित डुप्लिकेट [WinAPI स्लीप() फ़ंक्शन कॉल अपेक्षित से अधिक समय तक सोता है] (http://stackoverflow.com/questions/9518106/winapi-sleep- कार्यक्षमता- कॉल-नींद-अपेक्षा से अधिक लंबे समय तक) –
यदि आप वास्तविक समय में जागने की उम्मीद करते हैं तो आप सोने के लिए थ्रेड/प्रक्रिया नहीं डालना चाहते हैं। यदि आप शेड्यूलिंग के बारे में चिंता नहीं करना चाहते हैं तो स्पिनलॉक का उपयोग करें। –