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


  • Mod

    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


Anmelden zum Antworten