AGB  ·  Datenschutz  ·  Impressum  







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

W1000 Symbol 'Resume' ist veraltet ????

Ein Thema von RaSoWa1 · begonnen am 28. Mär 2010 · letzter Beitrag vom 24. Aug 2011
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
RaSoWa1

Registriert seit: 1. Jun 2006
Ort: Halle/Saale
140 Beiträge
 
Delphi 2010 Professional
 
#1

W1000 Symbol 'Resume' ist veraltet ????

  Alt 28. Mär 2010, 13:01
Hallo,

bei einem Projekt in dem ich Threads verwende kommt jetzt mit D 2010 folgende Warnung:
Zitat:
[DCC Warnung] ClassAlbum.pas(2068): W1000 Symbol 'Resume' ist veraltet
Lt. Online-Hilfe soll zum Start des Threads aber Resume verwendet werden.

Ist das ein Bug in D 2010?

Gruß Klaus.
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: W1000 Symbol 'Resume' ist veraltet ????

  Alt 28. Mär 2010, 13:11
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;

// This function is not intended to be used for thread synchronization.
procedure Suspend; deprecated;
Was ein Blick in die Sourcen so leisten kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

Re: W1000 Symbol 'Resume' ist veraltet ????

  Alt 28. Mär 2010, 13:11
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;
Lars
  Mit Zitat antworten Zitat
RaSoWa1

Registriert seit: 1. Jun 2006
Ort: Halle/Saale
140 Beiträge
 
Delphi 2010 Professional
 
#4

Re: W1000 Symbol 'Resume' ist veraltet ????

  Alt 28. Mär 2010, 14:02
Danke an euch.

Also ein Bug der Online-Hilfe.
Denn da steht:
Zitat:
Classes.TThread.Create
.....
Mit Create erzeugen Sie einen Thread in einer Anwendung. Wenn CreateSuspended den Wert false hat, wird Execute sofort aufgerufen. Andernfalls erfolgt der Aufruf erst nach einem Aufruf von Resume.
aber auch:
Zitat:
Classes.TThread.Start
......
Beginnt die Ausführung eines Threads.

Rufen Sie Start auf, um das Ausführen eines im unterbrochenen Status erzeugten Threads zu starten. Um ein Thread im unterbrochenen Status zu erzeugen, übergeben Sie true an den Konstruktor des Threads. Für die Threads, die im unterbrochenen Status nicht erzeugt wurden, hat Start keine Auswirkung.

Anmerkung: Die Methode Resume ist veraltet und seine Verwendung soll vermieden werden. Verwenden Sie stattdessen die Methode Start.
Gruß Klaus.
Klaus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 21:22
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

Geändert von EWeiss (22. Aug 2011 um 21:36 Uhr)
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#6

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 21:39
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 22:01
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.
Wenn ich so wie vorgeschlagen Suspend mit Terminate ersetze..
bzw. Resume mit Start dann geht bei mir gar nichts mehr.

Hmmmm ... Dann besser so belassen und mit den Warnungen leben?

gruss
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#8

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 23:01
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:
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;
Zu jedem "Terminate" gehört dann natürlich ein "Continue" um den Thread ggf. aufzuwecken.

Alternativ zu SuspendIfHalted ohne echtes Suspend-/ResumeThread:
while FHalted and not Terminated do Sleep(10);

Grüsse, Dirk
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 23:25
Danke für dein Beispiel .. Werde mir das mal anschauen in Ruhe.

Mein Problem ist folgendes
Delphi-Quellcode:
  procedure TMyThread.Execute;
  begin
    repeat
      EntercriticalSection;
      ..
      LeaveCriticalSection;
      ..
      //sichere Warteposition ausserhalb Lock
      SuspendIfHalted;
    until Terminated;
  end;
So wie hier wartest du auch auf Terminate..
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
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#10

AW: W1000 Symbol 'Resume' ist veraltet ????

  Alt 22. Aug 2011, 23:32
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 22:50 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