Einzelnen Beitrag anzeigen

blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Thread warten lassen mit WaitForSingleObject()

  Alt 17. Dez 2022, 20:57
Hallo!

Ich arbeite mit einer Liste im Haupt-Thread und habe einen Hilfs-Thread, der die komplette Liste durchgeht und jeweils nur den Status einer Eigenschaft des Listeneintrags ermittelt und das Ergebnis wieder in der Liste ablegt. Ich verwende den Hilfs-Thread, weil die Ermittlung des Status unter Umständen sehr lange dauern kann und dann die Anwendung blockieren würde.

Solange der Haupt-Thread die Liste anpasst oder wenn der Hilfs-Thread mit seiner Arbeit (vorerst) fertig ist, soll er schlafen.

Mein erster Ansatz war nun, den Hilfs-Thread mit einer Variable den Zustand "Pausiert" zu verpassen. In diesem Zustand macht er dann nichts anderes als Sleep(10), solange der Zustand "Pausiert" bestehen bleibt, also Polling.

Das finde ich aber unschön und stattdessen habe ich jetzt einen Mutex verwendet. Soll der Hilfs-Thread pausieren, reserviert sich der Haupt-Thread den Mutex. Der Hilfs-Thread versucht nun das Gleiche mit WaitForSingleObject(Mutex, INFINITE) und gerät deshalb in einen Wartezustand. Erst wenn der Haupt-Thread den Pause-Zustand beenden will, gibt er den Mutex wieder frei, der Hilfs-Thread verlässt seinen Wartezustand, bekommt den Mutex und gibt ihn sofort wieder frei.

Das funktioniert so weit ganz gut. Aber normalerweise reserviert man sich mit einem Mutex eine Ressource und ich mache irgendwie genau das Gegenteil. Gibt es vielleicht noch ein anderes, passendes Objekt, auf das ich mit WaitForSingleObject() warten kann, oder eine sonstige, bessere Möglichkeit?

Vielen Dank im Voraus!
  Mit Zitat antworten Zitat