Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Möglichkeit um Threads zu reseten ? (https://www.delphipraxis.net/117526-moeglichkeit-um-threads-zu-reseten.html)

pH1L 19. Jul 2008 19:21


Möglichkeit um Threads zu reseten ?
 
Hi,
Ich mache gerade etwas mit Threads und habe mich gefragt, ob man einen Thread (es geht um das Thread-Objekt) reseten kann, so dass der Code am Anfang der Execute-Prozedur wieder ausgeführt wird.

Aber nicht von außen über Terminate, sondern vom Thread aus..
Ich weiß das stinkt ein wenig nach GOTO von Basic, und schlechter Programmierstil,
aber es würde gerade einiges vereinfachen.

mfg und Danke im Vorraus

lbccaleb 19. Jul 2008 19:33

Re: Möglichkeit um Threads zu reseten ?
 
sowas wi goto gibts auch in delphi, nennt sich hier aber label, muss ein label an einer bestimmten stelle im quellcode machen und dann hinnspringen, wie genau das funzt hab ich jetzt auch nicht mehr im kopf, steht aber bestimmt in der delphi hilfe...

aber was mich wundert wieso keine schleife?? währe doch das einfachste oder nicht??

dann kommt es ja auch noch drauf an, was der thread macht, denn du kannst ihn ja beenden und einfach neustarten??!!

pH1L 19. Jul 2008 20:17

Re: Möglichkeit um Threads zu reseten ?
 
Also wenns so ausschaut:

Code:
procedure TAsdThread.Execute;
begin
  proc1(parameter);
  proc2(parameter);
  if func3(parameter) then Reset;
  proc4(parameter);
end;
dann ginge es so, das stimmt schon :wall: :

Code:
procedure TAsdThread.Execute;
begin
  repeat
    proc1(parameter);
    proc2(parameter);
  until not func3(parameter);
  proc4(parameter);
end;
Danke für die schnelle Antwort :wink:
mfg

himitsu 20. Jul 2008 07:55

Re: Möglichkeit um Threads zu reseten ?
 
ok, so mit 'nem repeat-until sieht es natürlich schöner/übersichtlicher aus,
aber nur der Vollständigkeit halber:
Zitat:

wie genau das funzt hab ich jetzt auch nicht mehr im kopf, steht aber bestimmt in der delphi hilfe...
jupp, steht da irgendwoe ... siehe Delphi-Referenz durchsuchengoto?
Delphi-Quellcode:
procedure TAsdThread.Execute;
label MyReset;
begin
  MyReset:
    proc1(parameter);
    proc2(parameter);
  if func3(parameter) then goto MyReset;
  proc4(parameter);
end;
// normaler Weisewürde man ja proc1 und proc2 nicht einrücken
// aber so erkennt man zumindestens die Schleife ^_^

SvB 20. Jul 2008 08:34

Re: Möglichkeit um Threads zu reseten ?
 
Hi,

Ich würde das ganze so machen:
Delphi-Quellcode:
procedure TAsdThread.Execute;
begin
  while not Terminated do begin
    proc1(parameter);
    proc2(parameter);
    if func3(parameter) then Continue;
    proc4(parameter);
    break;
  end;
end;
// Delphi Hilfe:
// Continue = Setzt die Programmausführung mit dem nächsten Durchlauf einer for-, while- oder repeat-Schleife fort.
// Break = Verlässt eine for-, while- oder repeat-Schleife.
Ich denke, so ist es noch eleganter gelöst.

Grüße Sven

alzaimar 20. Jul 2008 09:55

Re: Möglichkeit um Threads zu reseten ?
 
Danke SvB, damit hat der goto-Quark (der hier wirklich deplaziert ist) ein Ende.

Man könnte es auch über ein If-Else lösen, denn das wäre vermutlich logscher, aber ein Continue ist ein modernes Goto.

SvB 20. Jul 2008 10:03

Re: Möglichkeit um Threads zu reseten ?
 
Jo, das wäre sogar noch besser. Würde dann so aussehen:

Delphi-Quellcode:
procedure TAsdThread.Execute;
begin
  while not Terminated do begin
    proc1(parameter);
    proc2(parameter);
    if not func3(parameter) then begin
      proc4(parameter);
      break;
    end;
  end;
end;
Grüße Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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