Wohin mit 'PeekMessage'



  • Hallo

    Wenn man eine Nachricht aus einem Thread an den Dialog sendet, dann soll diese mit 'PeekMessage' augelesen und weiterverarbeitet werden. Dies sei zumindest die richtige Vorgehensweise.

    Meine bescheidene Frage ist nun, WO soll 'Peek Message' aufgerufen werden?

    Danke!



  • öhm die Nachrichtenschleife wird doch schon von der MFC gemacht.
    Tu mal einfach in der MessageMap deine eigene Nachricht mit abfangen, muss halt ohne Assistenten machen. also

    ON_MESSEAGE(WM_MYMESSAGE,OnMyMessage) //Das in die cpp BEGIN_MESSAGE_MAP
    //aufpassen nicht dort rein wo der Assistent rummehrt
    

    und das in deine Klasse.h

    afx_msg void OnMyMessage(LPARAM lParam,WPARAM wParam);
    


  • Naja, du kannst innerhalb des Dialoges die PeekMessage() innerhalb einer Schleife laufen lassen. Ich hatte mal so ein ähnliches Problem. Bei mir hat es so funktioniert:

    while (i<=30000) 
    { 
           if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) 
           // habs auch mit PM_NOREMOVE getestet 
           { 
                if (msg.message == WM_KEYDOWN) 
                return TRUE; 
                //Nachrichtenweiterleitung evtl. continue 
           } 
    
            i++; 
            WeitereMethode(i); 
    }
    

    Ist aber nicht so sauber.



  • Das wäre eigentlich doppelt-gemoppelt. Wird eigentlich so wie Pellaeon schrieb, gemacht. 😉



  • sky21 schrieb:

    Wenn man eine Nachricht aus einem Thread an den Dialog sendet, dann soll diese mit 'PeekMessage' augelesen und weiterverarbeitet werden. Dies sei zumindest die richtige Vorgehensweise.

    Jeder Dialog hat doch eine Message Pump und oft wird dies darin verwendest...
    Du kannst Dir auch das Beispile aus der MFC anschauen (DoModal)



  • AndyDD schrieb:

    while (i<=30000) 
    { 
           if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) 
           // habs auch mit PM_NOREMOVE getestet 
           { 
                if (msg.message == WM_KEYDOWN) 
                return TRUE; 
                //Nachrichtenweiterleitung evtl. continue 
           } 
    
            i++; 
            WeitereMethode(i); 
    }
    

    Wobei eine typische Fenstersanwendung ja eher de GetMessage-Funktion benutzt. So lange warten, bis was vorliegt.
    PeekMessage kommt dann in der Spieleschleife zum Einsatz(nicht nur, klar, nur als Beispiel)



  • Jochen Kalmbach schrieb:

    sky21 schrieb:

    Wenn man eine Nachricht aus einem Thread an den Dialog sendet, dann soll diese mit 'PeekMessage' augelesen und weiterverarbeitet werden. Dies sei zumindest die richtige Vorgehensweise.

    Jeder Dialog hat doch eine Message Pump und oft wird dies darin verwendest...
    Du kannst Dir auch das Beispiel aus der MFC anschauen (DoModal)

    Hmmm ich denke dass ich langsam das Prinzip der Messages verstehe. Aber, dass man eine Dialog-Methode von einem Thread aus nicht aufrufen kann, versteh ich einfach wirklich immer noch nicht (ein anderer Beitrag hier im Forum handelte eben davon, dass Threads mit dem Dialog nur mittels Msgs kommunizieren soll/darf).



  • Das Problem heißt threadsafe 🙂
    Stell dir mal vor, der Dialog steckt grad in einer Abarbeitung einer Nachricht und gleichzeitig fängst du an von einem extra Thread aus was da zu bearbeiten. Das geht 999 mal gut und dann kommt murks raus.



  • hallo @ all

    ist mir sehr peinlich zu fragen aber mein lehrer hat mir ein buch gegeben wo tutorials drin stehn für C++ Builder oder Visual C++ von microsoft... ich mochte sie gern ausprobieren NUR .....von wo krieg ich C++ her ich finde unetr google.de nixx kan mir jemand helfen wäre super oder ist C++ kein program was man downloaden kann????

    Dnake im vorraus 🙄



  • FouaD schrieb:

    NUR .....von wo krieg ich C++ her ich finde unetr google.de nixx kan mir jemand helfen wäre super oder ist C++ kein program was man downloaden kann????

    So lange Du keine MFC benötigst hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-130812.html

    Das aktuelle PSDK musst Du dann auch noch installieren...
    http://www.microsoft.com/downloads/details.aspx?familyid=D8EECD75-1FC4-49E5-BC66-9DA2B03D9B92&displaylang=en



  • hey vielen vielen dank ich probier das mal aus danke--
    und sry das ich euch mittendrin sone blöde frage gestellt hab 😃

    FouaD :p


Anmelden zum Antworten