AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread warten lassen mit WaitForSingleObject()

Ein Thema von blablab · begonnen am 17. Dez 2022 · letzter Beitrag vom 18. Dez 2022
Antwort Antwort
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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.585 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Thread warten lassen mit WaitForSingleObject()

  Alt 17. Dez 2022, 21:54
Wie wäre es mit Events? Also CreateEvent usw. als API-Funktion bzw. TEvent in Delphi, wenn die Delphiversion neu genug ist.

Auf die kannst du auch warten usw., also genau was du möchtest.

Wenn du WaitForMultipleObjects verwendest, kannst du auch gleichzeitig auf ein Event zum Beenden des Threads warten.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
IceBube

Registriert seit: 9. Jul 2008
178 Beiträge
 
#3

AW: Thread warten lassen mit WaitForSingleObject()

  Alt 17. Dez 2022, 22:12
Vielleicht liege ich komplett daneben aber kannst du nicht statt dem "Hilfs-Thread" einen "System.Threading.ITask" nützen der das erledigt?
  Mit Zitat antworten Zitat
blablab

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

AW: Thread warten lassen mit WaitForSingleObject()

  Alt 18. Dez 2022, 21:28
Danke für die Antworten!

Anscheinend brauche ich eine neue Delphi-Version...
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz