Autor Beitrag
adina83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mi 16.05.12 19:36 
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TSio.Execute;
begin
  { Plazieren Sie den Thread code hier }
  repeat
    Synchronize(SioSyncProcess);                                                // Senden und empfangen von Daten
    SuspendIfHalted;                                                            //
  until terminated;
end;


und im Hauptprogramm hab ich folgende Anweisung benutzt:

ausblenden Delphi-Quelltext
1:
if THS.Suspended then begin ths.start; end;					
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.