मुझे सर्वर साइड गेम लूप बनाने की आवश्यकता है, समस्या यह है कि लूप सीपीयू उपयोग को सीमित कैसे करें।करता है जबकि लूप हमेशा पूर्ण CPU उपयोग लेता है?
प्रोग्रामिंग के अपने अनुभव में, व्यस्त लूप हमेशा अधिकतम CPU उपयोग ले सकता है। लेकिन मैं एसडीएल (सरल डायरेक्टमीडिया लेयर) का कोड पढ़ रहा हूं, इसमें एक फंक्शन SDL_Delay(UINT32 ms)
है, और इसमें थोड़ी देर लूप है, क्या यह अधिकतम सीपीयू उपयोग लेता है, अगर नहीं, तो क्यों?
https://github.com/eddieringle/SDL/blob/master/src/timer/unix/SDL_systimer.c#L137-158
do {
errno = 0;
#if HAVE_NANOSLEEP
tv.tv_sec = elapsed.tv_sec;
tv.tv_nsec = elapsed.tv_nsec;
was_error = nanosleep(&tv, &elapsed);
#else
/* Calculate the time interval left (in case of interrupt) */
now = SDL_GetTicks();
elapsed = (now - then);
then = now;
if (elapsed >= ms) {
break;
}
ms -= elapsed;
tv.tv_sec = ms/1000;
tv.tv_usec = (ms % 1000) * 1000;
was_error = select(0, NULL, NULL, NULL, &tv);
#endif /* HAVE_NANOSLEEP */
} while (was_error && (errno == EINTR));
यदि कोई 'सिलेक्ट' सिग्नल सिग्नल प्राप्त करता है, तो यह 'errno == EINTR' के साथ -1 देता है, इसलिए यह सच नहीं है कि' चयन 'हमेशा पूछे जाने वाले समय को सोता है। –
ठीक है, मेरी गलती। कोई विचार क्यों जीएनयू मैनुअल इस मामले में नींद का चयन करने की सिफारिश कर रहा है? –
क्योंकि कुछ पुराने (गैर लिनक्स) यूनिक्स सिस्टम 'नींद' को 'सिगलआरएम' और 'पॉज़' के साथ लागू किया गया था –