![]() |
W1000 Symbol 'Resume' ist veraltet ????
Hallo,
bei einem Projekt in dem ich Threads verwende kommt jetzt mit D 2010 folgende Warnung: Zitat:
Ist das ein Bug in D 2010? Gruß Klaus. |
Re: W1000 Symbol 'Resume' ist veraltet ????
Delphi-Quellcode:
Was ein Blick in die Sourcen so leisten kann. :angel2:
// This function is not intended to be used for thread synchronization.
procedure Resume; deprecated; // Use Start after creating a suspended thread. procedure Start; // This function is not intended to be used for thread synchronization. procedure Suspend; deprecated; |
Re: W1000 Symbol 'Resume' ist veraltet ????
Also wenn man bei Delphi selber guckt, steht dies im Source:
Delphi-Quellcode:
// This function is not intended to be used for thread synchronization.
procedure Resume; deprecated; // Use Start after creating a suspended thread. procedure Start; |
Re: W1000 Symbol 'Resume' ist veraltet ????
Danke an euch.
Also ein Bug der Online-Hilfe. Denn da steht: Zitat:
Zitat:
|
AW: W1000 Symbol 'Resume' ist veraltet ????
Ich sehe Suspend ist veraltet...
aber was verwenden an stelle dessen? Werde aus euren Beiträgen nicht so richtig schlau. OK für Resume nehme ich Start.. aber für Suspend ? EDIT: Terminate? gruss |
AW: W1000 Symbol 'Resume' ist veraltet ????
Suspend sollte man ganz vermeiden, da man nie wissen kann in welchem Augenblick man den Thread damit erwischt - schwer zu findende Deadlocks sind so vorprogrammiert. Besser Terminate oder ein eigenes Flag(Boolean/Event/Semaphore..) verwenden um den Thread ggf. an einer kontrollierten Stelle warten zu lassen.
|
AW: W1000 Symbol 'Resume' ist veraltet ????
Zitat:
bzw. Resume mit Start dann geht bei mir gar nichts mehr. Hmmmm ... Dann besser so belassen und mit den Warnungen leben? gruss |
AW: W1000 Symbol 'Resume' ist veraltet ????
Hmm.. wenn property Terminated wie in älteren Versionen ReadOnly ist und .Start das scheinbar auch nicht zurücksetzt ist es natürlich keine Lösung - dann kann man den Thread auch freigeben und einen neuen erzeugen.. das Konzept scheint mal wieder sehr gut durchdacht zu sein :?
Idee:
Delphi-Quellcode:
Zu jedem "Terminate" gehört dann natürlich ein "Continue" um den Thread ggf. aufzuwecken.
type
TMyThread = class(TThread) private FHalted: Boolean; procedure SuspendIfHalted; public procedure Halt; procedure Continue; end; procedure TMyThread.Halt; begin FHalted := True; end; procedure TMyThread.Continue; begin FHalted := False; ResumeThread(Handle); end; procedure TMyThread.SuspendIfHalted; begin if FHalted then SuspendThread(Handle); end; procedure TMyThread.Execute; begin repeat EntercriticalSection; .. LeaveCriticalSection; .. //sichere Warteposition ausserhalb Lock SuspendIfHalted; until Terminated; end; Alternativ zu SuspendIfHalted ohne echtes Suspend-/ResumeThread:
Delphi-Quellcode:
while FHalted and not Terminated do Sleep(10);
Grüsse, Dirk |
AW: W1000 Symbol 'Resume' ist veraltet ????
Danke für dein Beispiel .. Werde mir das mal anschauen in Ruhe.
Mein Problem ist folgendes
Delphi-Quellcode:
So wie hier wartest du auch auf Terminate..
procedure TMyThread.Execute;
begin repeat EntercriticalSection; .. LeaveCriticalSection; .. //sichere Warteposition ausserhalb Lock SuspendIfHalted; until Terminated; end; Der Thread läuft also so lange bis der Zustand Terminate eintritt. Wenn ich nun anstelle von Suspend.. Terminate verwende so wie vorgeschlagen dann beendet sich logischerweise der Thread das hat zur folge das ich anschließend kein Plugin mehr starten kann. MeinThread.Suspend hält den Thread ja nur an und beendet ihn nicht so wie Terminate das tut. Damit stehe ich im Konflikt zu der Aussage anstelle von Suspend! Terminate zu verwenden. Na ja und wie MeinThread.Start im vergleich zu MeinThread.Resume steht das ist auch noch fraglisch. gruss |
AW: W1000 Symbol 'Resume' ist veraltet ????
Das Suspend würde ich nicht durch Terminate ersetzen, das funzt halt einfach nicht.
Das "gefähliche" Suspend von aussen würde ich halt vermeiden indem ich nur ein Flag setze über welches der Thread sich zu einem sicheren Zeitpunkt (wenn er gerade nichts blockiert) selber unterbricht. Das Fortsetzen (ResumeThread) ist dann unkritisch. Grüsse, Dirk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz