Nachrichten von aufrufendem Thread erhalten?



  • Ist es möglich die MessageLoop in einen eigenen Thread zu stecken und die Nachrichten vom aufrufenden Thread ebenfalls zu erhalten?

    MfG SideWinder



  • jede windoof-anwendung kann ansich nur eine messagequeue haben (ich glaub das ist wegen csrss so). du kannst aber messages in die queue einer anwendung weiterleiten mit: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/MessagesandMessageQueues/MessagesandMessageQueuesReference/MessagesandMessageQueuesFunctions/PostThreadMessage.asp



  • jeder thread hat eine eigene message queue



  • ßß schrieb:

    jeder thread hat eine eigene message queue

    Aber nur, wenn du sie ihm gibst. Sonst hat ein Thread keine Messageloop.



  • @Luckie: ⚠ message queue != Messageloop ⚠



  • Ja und wie kann ich jetzt in einer MessageLoop beide MessageQueues abfragen - eventuell gibts ja auch einen besseren Trick die MessageLoop in einen Thread auszulagern 🙂

    MfG SideWinder



  • flenders schrieb:

    @Luckie: ⚠ message queue != Messageloop ⚠

    Die Message Queue wird glaub ich beim ersten Aufruf von GetMessage erstellt.



  • AttachThreadInput wird wohl hier nichts bringen - ansonten musst du es wohl so machen, wei net schrieb: In die Hauptanwendung eine MessageLoop, die einfach alles Messages weiterleitet 🙂



  • Mein Ziel ist es die ganze Zeit diese MessageLoop aus dem Hauptprogramm in einen anderen Thread auszulagern (bzw. egal auf welchem Wege auszulagern). Das ist nicht möglich?

    MfG SideWinder



  • SideWinder schrieb:

    Mein Ziel ist es die ganze Zeit diese MessageLoop aus dem Hauptprogramm in einen anderen Thread auszulagern

    dazu musste wohl das window von diesem anderen thread erzeugen lassen (CreateWindow etc.). was willst du denn spezielles erreichen?



  • flenders schrieb:

    @Luckie: ⚠ message queue != Messageloop ⚠

    Habe mich verschrieben. Aber das eine bedingt das andere mehr oder weniger.



  • net schrieb:

    Was willst du denn spezielles erreichen?

    int WINAPI WinMain (HINSTANCE hinst, HINSTANCE hprev, PSTR cmdline, int showcmd)
    {
        // Fensterchen erstellen
    
        // Vor dem Eingang in die MSG-Loop hier noch eine lange Funktion aufrufen die nicht in einen anderen Thread verlegt werden soll (laut Doku des Herstellers, kA warum)
        // Problem: Sie dauert elends lange und es sieht aus als würde das Programm abgestürzt sein, Lösung: Fensterchen bereits jetzt anzeigen und reagieren lassen - da lange_func() nicht in einen anderen Thread darf eben die MSG-Loop reinwerfen? But how to?
    
         return 0;
    }
    

    MfG SideWinder



  • SideWinder schrieb:

    // Fensterchen erstellen

    dann werden bereits messageloop und wndproc benötigt. es müssem schon einige messages verarbeitet werden, bevor das window zu sehen ist.

    SideWinder schrieb:

    // Vor dem Eingang in die MSG-Loop hier noch eine lange Funktion aufrufen die nicht in einen anderen Thread verlegt werden soll (laut Doku des Herstellers, kA warum)

    du solltest herausfinden, was dagegen spricht. hersteller anrufen, mit der funktion (in einem separaten thread) rumspielen usw.

    SideWinder schrieb:

    // Problem: Sie dauert elends lange und es sieht aus als würde das Programm abgestürzt sein, Lösung: Fensterchen bereits jetzt anzeigen und reagieren lassen - da lange_func() nicht in einen anderen Thread darf eben die MSG-Loop reinwerfen?

    das wär im endeffekt das gleiche. wenn deine wndproc in einem anderen thread läuft, die func. aber im ersten thread ausgeführt wird, würde meiner meinung nach nix ändern.

    btw: wenn multithreading tatsächlich nicht geht, könntest du die funktion in einen extra prozess stecken und mit dem kommunizieren (pipes, lpc, was auch immer). dabei würden wenigstens beide nicht den gleichen adressraum sharen (was vielleicht das problem ist?)


Log in to reply