שאלה לי אליכם

vbgames

New member
שאלה לי אליכם

התוכנית שלי פותחת חלון (בלי ספרית MFC) ובתוכו משתמשת בDirectX ומציירת כל מיני דברים. מה יכולה להיות הסיבה שכשאני מנסה למזער או לסגור את התוכנית, להזיז את החלון או כל פעולה על החלון, היא מגיבה אחרי 10 שניות בערך? איך אני משפר את זה? ואם אתם מכירים במקרה VB, מה המקביל בC++ לפקודה DoEvents אם יש בכלל...
 

TZURYOAV

New member
כן ב VC אם אתה עושה לולאה

ואתה רוצה לאפשר תגובה של המשתמש אתה צריך לבדוק בתוך הלולאה את תור ההודעות ולהפיץ אותן בעצמך תקרא על MESSAGE LOOP PEEKMESSAGE ו DISPATCHMESSAGE סביר להניח שיש לך שם ב תוכנית לולאה כזאת....
 

vbgames

New member
אני לא כל כך מבין...

כן יש לי את זה בתוך הלולאה
if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) { if( 0 == GetMessage(&msg, NULL, 0, 0 ) ) { // WM_QUIT was posted, so exit return (int)msg.wParam; } // Translate and dispatch the message if( 0 == TranslateAccelerator( hWnd, hAccel, &msg ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } }​
אבל האמת היא שאני לא מבין כל כך מה זה עושה, כי הרי הפענוח של ההודעות עצמם נמצא בפונקציה הזאת:
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )​
האם אני צריך להעביר את כל מה שבפונקציה הזאת לתוך הלולאה? סלח לי שאני לא מבין כלום...לא אני בניתי את הקוד ואין לי אפילו ספר בנושא
 

odstudio

New member
מקביל ל- DoEvents ב- C++

כן, תתפלא שיש דבר כזה: פונקציית API הנקראת Sleep. העבר לפונקציה זו פרמטר בעל ערך 1 וזה בדיוק המקביל לפקודה DoEvents ב- VB.
 

icemano

New member
sleep לא יעשה את העבודה

ה doevents ב VB לא בדיוק עושה suspend ל thread כמו שה sleep עושה. ה doevents עובר על תור ההודעות של ה thread בדומה למה שציין יואב צור.
 

vbgames

New member
אוקיי תודה לכם

כנראה שאין בעיה בקוד, אני פשוט מעמיס מאוד על התוכנית בכל מיני אפקטים. כשאני מוריד כמה מהם התוכנית מגיבה כמו שצריך... תודה רבה על ההתיחסות
 
למעלה