Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Thread Problem mit Resume
adina83 - Mi 16.05.12 19:36
Titel: Thread Problem mit Resume
Hallo ich habe ein Problem mit dem Fortsetzen eines pausierenden Threads. Laut Delphi ist die Anweisung
thread.resume veraltet. Die Anweisung thread.start führt aber zu folgender Fehlermeldung:
Exception-Klasse EThread mit Meldung 'Start kann für einen laufenden oder unterbrochenen Thread nicht aufgerufen werden'. Prozess test.exe (5100)
Es gibt zwar schon Diskussionen dazu aber leider bin ich daraus nicht schlau geworden.
Die Threadausführung sieht wie folgt aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TSio.Execute; begin repeat Synchronize(SioSyncProcess); SuspendIfHalted; until terminated; end; |
und im Hauptprogramm hab ich folgende Anweisung benutzt:
Delphi-Quelltext
1:
| if THS.Suspended then begin ths.start; end; |
BenBE - Mi 16.05.12 21:58
Prinzipiell sollte man zur Vermeidung von Deadlocks generell auf die Aufrufe von Resume/Suspend verzichten, da dies im Zusammenhang mit Thread-Synchronisationsmechanismen wie Critical Sections, Semaphoren, und dergleichen zu schwer debuggbaren Problemen führen kann. Wenn man einen Thread anhalten will oder muss, sollte sich der Thread selber darum kümmern und an definierten Punkten mit Hilfe von Thread-Synchronisationsmechanismen auf den Wunsch des Fortsetzens warten. Damit vermeidet man zuverlässig Deadlocks und zudem umgeht man die Notwendigkeit überhaupt Suspend verwenden zu wollen.
Warum Start nicht will ist jetzt die andere Frage. Ich sag mal: 42.
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!