मैं एक ड्राइंग एप्लिकेशन बना रहा हूं जो ओपनजीएल को प्रस्तुत करता है जब इसे WM_SCROLL या WM_MOUSEMOVE मिलता है। बात यह है कि बहुत सारे माउस चाल हैं और मुझे प्रति सेकंड अधिकतम 60 फ्रेम प्रस्तुत करने की आवश्यकता है। इसलिए मैंने कैनरेन्डर नामक अपने इंजन वर्ग में एक बूल बनाया। तो मेरे प्रस्तुत करने में() proc मैं करता हूं: अगर (! कैनेंडर) { वापसी; } कैनेंडर = झूठा;मेरा टाइमर टिकिंग क्यों बंद कर देता है?
असल में यह 60 से अधिक एफपीएस प्रस्तुत करने से रोकता है।
मैं WM_CREATE में टाइमर बना देता हूं।
जब मुझे WM_TIMER मिलता है तो मैं कन्डरडर को सत्य पर सेट करता हूं।
मैंने इसे बीप बनाया ताकि मुझे पता चले कि टाइमर चल रहा है। जैसे ही मैं स्क्रॉलिंग या माउस को ले जाना शुरू करता हूं, बीपिंग बंद हो जाती है और अब मैं प्रतिपादन नहीं देख पाता हूं। यह मेरे टाइमर को क्यों रोक देगा? इसके अलावा जब मैं टाइमर को फिर से शुरू करता हूं तो फिर से शुरू होता है, फिर से इसे फिर से बंद कर देता है।
धन्यवाद
संदेश पम्प:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
निर्माण:
case WM_CREATE:
//Set Window Title
SetWindowText(hWnd,engineGL.current.caption.c_str());
SetTimer(hWnd, // handle to main window
120, // timer identifier
17, // 60 fps interval
(TIMERPROC) NULL); // no timer callback
आपका पूरा संदेश पंप कैसा दिखता है, और क्या आप टाइमर बनाने के लिए उपयोग किए गए कोड को भी पोस्ट कर सकते हैं? –
हां, मुझे संदेह है कि आपके ईवेंट प्रसंस्करण के साथ कुछ अजीब बात है। – stinky472
यह केवल तभी होता है जब मेरा रेंडर फ़ंक्शन कैनरेंडर को झूठा सेट करता है, अन्यथा यह ठीक – jmasterx