Event kontrollieren
-
Ich arbeite hier mit einigen Events, um zwischen meinen verschiedenen Threads und Klassen zu kommunizieren. Jetzt benötige ich allerdings eine Abfrage, ob ein bestimmter Event gesetzt wurde (dieser wird vom Hauptprogramm gesetzt, wenn die gesamte Arbeit beendet werden soll).
PS: Gibt es eigentlich eine allgemeine Funktion "Warte auf b Objekte von n"? (WaitForMultipleObjects() deckt leider nur die Fälle b=1 und b=n ab)
-
Meinst du, " Warte auf eine bestimmte Anzahl an Ereignisse"?
Könntest dir ja zurecht basteln, in dem du Flags setzt, welche Ereignisse losgegangen sind.
Wenn dann dein Ereignis b = 2 losgeht, fragst du ab, ob auch die anderen Flags = True sind. Wenn nicht, dann wartest du länger.
-
Paul_C. schrieb:
Meinst du, " Warte auf eine bestimmte Anzahl an Ereignisse"?
Ich meinte etwas in der Art "Ich habe zehn Events - wenn mindestens drei davon (egal welche) sich gemeldet haben, soll es weitergehen".
Könntest dir ja zurecht basteln, in dem du Flags setzt, welche Ereignisse losgegangen sind.
Wenn dann dein Ereignis b = 2 losgeht, fragst du ab, ob auch die anderen Flags = True sind. Wenn nicht, dann wartest du länger.Ich bin mir jetzt nicht sicher, ob ich dich verstanden habe.
-
Ok, im Prinzip ähnlich realisierbar. (Denke ich zumindest.)
Also, du wartest mit WaitForMultipleObjects(...).
Sobald ein Event eintritt, erhöhst du einen Zähler.
Mit Hilfe einer if - Abfrage überprüfst du, ob sich (inkl. dieses Ereignis) schon 3 Ereignisse ereignet haben. (if Zähler > 3).
Wenn ja, dann DoAnything(), wenn nicht DoNothing().So, in etwa?
MfG,
Paul.
-
ich glaube das problem beim mitzählen ist, dass man, nachdem waitformultipleobjects ausgelöst wurde, das object aus dem handle-array rausnehmen muss. vielleicht mal mit 0 oder INVALID_HANDLE_VALUE ersetzen. wenn's nicht funzt muss man sich wohl ein neues array zusammenstellen ohne dieses objekt.
-
Ja, solche Überlegungen hatte ich auch schon - nur hat das ein weiteres Problem: Deadlock-Gefahr (WaitForMultipleObjects reserviert mir die Sync-Objekte, wenn es zurückkehrt). Aber derartige Entwürfe stehen erstmal im Hintergrund
Wichtiger ist mir atm die erste Frage: Wie kann ich testen, ob ein CEvent gerade gesetzt ist?
-
CStoll schrieb:
Wichtiger ist mir atm die erste Frage: Wie kann ich testen, ob ein CEvent gerade gesetzt ist?
mit 'WaitForSingleObject(eventhandle, 0)'
gibt WAIT_OBJECT_0 zurück, wenn der event gesetzt ist