none
MessageLoop in einem seperaten Thread RRS feed

  • Frage

  • Ich schreibe zZ ne kleine Anwendung.

    Wenn ich einen Hook vom Typ WH_KEYBOARD_LL erstelle, funktioniert alles super, meine Main-Funktion  enthält den Messageloop "while(GetMessage(&message,NULL,0,0));"

    und alles ist in Ordnung.

    Wenn ich nunversuche diese Schleife in eine Funktion zu packen und diese Funktion in einen Thread packe, passiert gar nichts, ich kann nichts schreiben.

    Ich habe das Hauptprogramm mal  mittels Sleep und mal mittels WaitForMultipleObjects warten lassen, Resultat ist das gleiche.

    Gibt es also eine Möglichkeit, den MessageLoop in einen Thread auszulagern und was ist der Grund wiso der MessageLoop nicht richtig funktioniert(sprich HOOKPROC wird nicht aufgerufen).

    Mfg

     

    ?

    Samstag, 5. Februar 2011 20:51

Antworten

  • Nein! Es gibt keine Möglichkeit eine  Threadfunktion in einen anderen Thread auszulagern, weil Messages und die Queses dazu nicht auf einen Prozess bezogen sind sondern auf einen Thread.

    GetMessage kann also nur die Nachrichten empfangen, die auch in der Queue dieses Prozesses sind.

    Ansonsten verstehe ich in keiner Weise was ein Hook mit Deiner MessageLoop zu tun hat.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 5. Februar 2011 21:26
    Moderator

Alle Antworten

  • Nein! Es gibt keine Möglichkeit eine  Threadfunktion in einen anderen Thread auszulagern, weil Messages und die Queses dazu nicht auf einen Prozess bezogen sind sondern auf einen Thread.

    GetMessage kann also nur die Nachrichten empfangen, die auch in der Queue dieses Prozesses sind.

    Ansonsten verstehe ich in keiner Weise was ein Hook mit Deiner MessageLoop zu tun hat.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 5. Februar 2011 21:26
    Moderator
  • Ok. Danke für die schnelle Antwort. Es ist einfach ein Phänomen über das ich gestolpert bin als ich eine Klasse schreiben wollte. Ich wollte eine Klasse instanziieren, eine statische Methode,als HOOKPROC übergeben und in einer anderen den Messageloop laufen lassen, welchen ich in einem anderen Thread laufen lasse. Auf diese weise wäre meine Klasse und deren Benutzung etwas agiler. Als es nicht ging hab ich versucht ein Minimalbeispiel zum laufen zu bringen und bin gescheitert, und nun wollte ich wissenob es grundsätzlich möglich ist. Da es nicht möglich ist, habt ihr einen Vorschlag, mit welchen sich mein Klassenansatz dennoch umsetzen liese? Ansonsten muss ich erst alles abarbeiten und kann dann erst hooks setzen und den Loop anstelle die das per Threads zu parallelisieren. Mfg ?
    Samstag, 5. Februar 2011 22:27
  • Habs raus gefunden. War ein sehr guter Tipp mit den Threadbasierten Messagequeues. Ich hab nun keinen Thread erstellt der die Messagequeue enthält sondern, einen Thread der den Hook setzt und die Messagequeue enthält. Nun laeuft es vielen dank.
    Samstag, 5. Februar 2011 22:42