Hallo, ich versuche mich seit 2 Tagen an WinAPI. Wie kann ich von einem erstellten Thread eine Nachricht an das übergeordnete Fenster schicken? Ich suche schon seit Stunden im Internet wie ich den Handle (hwnd) des Hauptfensters dem Thread übergeben kann. Danach kann ich doch einfach mit Sendmessage() die Nachricht schicken oder? Danke ;)
Klar kannst du SendMessage auch aus einem Thhread heraus aufrufen. Den Window-Handle kannst du z.B. hier ermitteln http://support.microsoft.com/kb/242308 Denke daran, dass SendMessage asynchron arbeitet, d.h. dass die entsprechende Funktion nicht direkt aufgerufen wird, sondern vom Hauptthread der Anwendung mit seiner Botschaften-Schleife an die Fenster gesendet wird (an deren Window-Funktion). Das funktioniert auch nur in einer GUI-Anwendung. Uebrigens kannst du mit SendMessage auch einem Thread eine asynchrone Botschaft senden.
Atomek schrieb: > Uebrigens kannst du mit SendMessage auch einem Thread eine asynchrone > Botschaft senden. hö, Nachrichten kann man doch nur an Fenster schicken, oder? Ich hatte nämlich auch schon mal gesucht, ob das geht, hab dann aber ein unsichtbares Dummyfenster gebaut. SendMessage ist übrigens ein synchroner Aufruf. Wie das bei unterschiedlichen Threads ausseiht weiß ich aber ernicht. die asynchrone Variante ist PostMessage
Vlad Tepesch schrieb: > SendMessage ist übrigens ein synchroner Aufruf. > Wie das bei unterschiedlichen Threads ausseiht weiß ich aber ernicht. > > die asynchrone Variante ist PostMessage Genau das ist mir gerade auch eingefallen. PostMessage ist Fire-And-Forget und bei Threads ueblich. Waerend SendMessage synchron ist. Von SendMessage ist abzuraten zwischen Threads. Details hier: http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ms682453(v=vs.85).aspx über lpParameter kann man beliebige Daten dem Thread mitgeben. z.B. einen Zeiger auf nen Struct/Objekt wo man alles was der Thread so brauchen könnte reinpacken könnte... Bei _beginthread/_beginthreadex hat man arglist dafür.
bluppdidupp schrieb: > http://msdn.microsoft.com/en-us/library/ms682453(v=vs.85).aspx > über lpParameter kann man beliebige Daten dem Thread mitgeben. > z.B. einen Zeiger auf nen Struct/Objekt wo man alles was der Thread so > brauchen könnte reinpacken könnte... > > Bei _beginthread/_beginthreadex hat man arglist dafür. Aber hier bitte beachten: Wenn man CreateThread benutzt wird die C-RTL nicht korrekt initialisiert, also kann man sie nicht benutzen oder muss seine eigene C-Laufzeitbibiothek bauen, die damit kein Problem hat. Viel Spass dabei... ;-) _beginthread und Konsorten oder etwas aus MFC sind also mehr oder weniger Pflicht. Und Atomek hat Recht, SendMessage zwischen Threads führt ganz schnell zu Deadlocks. Ganz genau genommen lautet die Regel: Fenster werden nur von ihrem Thread aus manipuliert, d.h. Messages von einem Fremdthread zu senden ist generell bähh.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.