Threads aufwecken...
-
Hi,
mein Problem ist folgendes. Ich hab einen Thread, der irgendwann eine Statusänderung in die Registery schreibt. Ausserdem habe ich mehrere Thread, die darauf reagieren sollen, also den geschriebenen Wert auslesen sollen.
Am liebsten würde ich die Thread mit WaitForSingleObjectEx(..) "schlafen" legen. In der MSDN hab ich gelesen, dass die Threads mit QueueUserApc(..) wieder aufgeweckt werden können. Heisst also, dass der schreibende Thread das machen muss.Jetzt kommt das Problem. Wenn ich das richtig verstanden habe, dann müsste ich QueueUserApc(..) für jeden "schlafenden" Thread einzeln aufrufen. Leider kann ich nicht im Voraus sagen, wie viele Threads warten.
Hat jemand schon mal so was gemacht? Oder hat jemand ne Idee, wie ich das lösen könnte?

Thx, Maffe.
-
also für den fall das du nicht weisst, wieviele threads schlafen und diese auch NICHT von einander abhängig - sprich es egal ist in welcher reihenfolge sie geweckt werden - würde ich dir empfehlen, alle threads mit WaitForSingleObject( hEvent) zu bremsen. der "aufweckende" thread kann dann mit SetEvent( hEvent) die schlafenden threads wecken.
-
Hi,
also so mache ich es momentan. Aber so weit ich weiss, legt sich der Prozess nicht dabei schlafen. Ich kann mich auch irren, aber wenn ich die MSDN richtig verstehe, dann hab ich Recht. Sonst wäre es unsinnig zwischen alertable wait state und dem anderen Zustand zu unterscheiden, wie auch immer der genannt wird.
Aber trotzdem erstmal, Danke. Hat sich denn noch niemand von euch damit auseinander gesetzt.

-
Maffe001 schrieb:
Aber so weit ich weiss, legt sich der Prozess nicht dabei schlafen.
Wenn alle Threads schlafen, schläft der Prozess. WaitForSingleObject genügt dazu.
-
Oh, da hab ich mich falsch ausgedrückt. Ich meine natürlich den Thread, der auf den Status wartet. Das ist ja schon ein Unterschied, hätte den Post nochmal lesen sollen, bevor ich ihn abschicke.
