Run loop XP
-
Hallo,
ich habe eine Anwendung, die läuft auch noch auf einigen XP systemen,
nun stellt sich bei einem herraus das der Desktop nicht mehr auf die Maus
reagiert wenn meine Anwendung unter Last läuft:Ist da etwas unfachlich ?
int CAnApp::Run() { MSG msg; while (1) { if(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (!PumpMessage()) { ::PostQuitMessage(0); break; } }else WaitMessage(); } return CWinApp::Run(); }
Danke für Hinweise
Gruß
Karsten
-
Öhm. Keine Ahnung?
Sag mal lieber wozu du überhaupt
CWinApp::Run
überschreibst.
-
Hi,
unterschiedliche Gründe, auch z.B Weil das MainWnd weitere ActiveX enthält und diese PreTranslateMeassage nicht ohne hoocks erhalten, im Zusammenhang mit Twain -Interfaces, sowie some costomcontrols.
In InitApp wird wird eine Fensterklasse registert, und mit einem CWnd verbunden. Dialog klasse hatte sich nicht ausreichend bewährt.
Es ist keine MDI/SDI Anwendung.
Es stellt sich heraus, das unter einer XP Version, meine Application zwar läuft, aber der Desktop dort keine Mauseingaben mehr verarbeitet. Sehr seltsames verhalten, bzw. werden Aktionen auf dem Desktop dort erst nach dutzenden Sekunden ausgelößt. Ich konnte das Verhalten über TView einsehen jedoch nicht nachstellen. Und hoffe das dass keine Fehlverwendung von PumpMessage ist, bezüglich dem XP -Pack für VS2013.
Gruß
Karsten
-
PreTranslateMessage nun wieder mit Deiner Message Loop zu tun. PreTranslateMessage wird ausschließlich durch PumpMessage bedient.
Dein Code ist unsinnig. Der macht nichts besser als CWinApp/CWinThread::Run.
Du hebelst sogar noch CWinApp::OnIdle aus, wodurch temporäre Objekte nun nicht mehr freigegeben werden. Also keine gute Idee!Ich würde eher davon ausgehen, dass ein Fenster immer wieder gezeichnet werden will und Deine Anwendung niemals in WaitMessage stehen bleibt. Und dadurch letzten Endes immer neue Nachrichten auslöst.
Das wird aber nicht unbedingt ein XP Problem sein.
-
Ok danke Dir,
läuft mit zwar mit null CPU last, aber nicht immer, dann denke ich das
ohne idle das system zu kurz kommt, und der desktop blockt.Ich werde die Loop entfernen. Danke!
Gruß
Karsten