Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Warten auf Antwort mit Hilfe von Threads (Timeout)
alkan - Do 07.08.08 20:28
Titel: Warten auf Antwort mit Hilfe von Threads (Timeout)
Wie kann ich erreichen, dass ein Thread suspendiert wird, aber nach einer bestimmten Zeit (Timeout) automatisch weiterläuft?
Das Problem mit Sleep() ist ja, dass der Thread dann auf jeden Fall die angegebene Zeitspanne abwartet. Ich möchte aber unbedingt, dass der Thread nach einem Resume sofort weitergeht. (Konkret geht es um ein Abwarten einer Antwort in einer Netzwerkanwendung, verbunden mit einem fixen Timeout).
Gibt es dafür eine einfache Möglichkeit?
Vielen Dank im Voraus.
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Do 07.08.2008 um 20:35
alias5000 - Mo 11.08.08 13:55
Wenn du es nicht mit einem Sleep, sondern einer SChleife löst?
Der Thread würde dann statt sleep sowas ausführen:
Delphi-Quelltext
1: 2: 3:
| repeat sleep(50); until GoForward; |
...wobei GoForward eine synchronisierte Abfrage auf eine Boolean-Variable ist, die im Mainthread gesetzt werden kann.
Evtl. kanst du ja dann noch die Thread-Priorität zeitweise heruntersetzen um mit der SChleife nicht zu viel Leistung zu verheizen. Kommt drauf an, wie zeitkritisch deine Sache ist
Gruß
alias5000
Martok - Mo 11.08.08 15:40
Hm... ne
alias5000, Busy-Waiting wäre hier aber der allerletzte Versuch ;)
Ich würde das so machen: SynchronisationsObjekt erstellen (Event,Semaphore)
Das setzt der Thread und wartet dann mit WaitForSingleObject() und Timeout-Angabe drauf.
Wenn er weiter darf wird das Objekt von der Datenquelle (dem anderen Thread) resettet und schon macht der erste weiter.
Am Result von WaitForSingleObject kann man feststellen ob es ein Timeout war oder das Objekt verfügbar geworden ist.
cu
Martok
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!