Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ist die Verwendung von TTask so korrekt? (https://www.delphipraxis.net/191308-ist-die-verwendung-von-ttask-so-korrekt.html)

Luckie 2. Jan 2017 13:56

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1357706)
Zitat:

Zitat von Luckie (Beitrag 1357697)
Ist ja irgendwie logisch. Die Schleife macht ja nichts anders als ein Steuerelement im Formular hochzuzählen. Wenn du das jetzt synchronisierst läuft das ganze quasi im Thread des Formulares.

Hallo Luckie / Michael, wenn es um Threads in Delphi geht, wessen bzw. welches Skript ist dann auch heute noch wohl erste Anlaufstelle, die Referenz schlechthin? ;-)

Nach dieser Schleimeinheit eine ganz vorsichtige Anregung: Wäre nicht die Klasse "TTask" (ab welcher Delphiversion?) es wert, dort mit aufgenommen zu werden, so als Ergänzung? Immerhin sind jetzt schon sogar die Fiber enthalten.

Wennich eine Delphi Version hätte, die dies unterstützt. :?

stahli 2. Jan 2017 14:02

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Luckie (Beitrag 1357760)
Zitat:

Zitat von Delphi-Laie (Beitrag 1357706)
Zitat:

Zitat von Luckie (Beitrag 1357697)
Ist ja irgendwie logisch. Die Schleife macht ja nichts anders als ein Steuerelement im Formular hochzuzählen. Wenn du das jetzt synchronisierst läuft das ganze quasi im Thread des Formulares.

Hallo Luckie / Michael, wenn es um Threads in Delphi geht, wessen bzw. welches Skript ist dann auch heute noch wohl erste Anlaufstelle, die Referenz schlechthin? ;-)

Nach dieser Schleimeinheit eine ganz vorsichtige Anregung: Wäre nicht die Klasse "TTask" (ab welcher Delphiversion?) es wert, dort mit aufgenommen zu werden, so als Ergänzung? Immerhin sind jetzt schon sogar die Fiber enthalten.

Wennich eine Delphi Version hätte, die dies unterstützt. :?

http://www.delphipraxis.net/1263046-post45.html
... könnten ja Tutorialschreiber mal drunter fallen ;-)

(...vor allem wenn man weiß (oder davon ausgehen kann), dass diese sich mit Delphi keine goldene Nase verdienen, sondern das eher aus Interesse unterstützen...)

Uwe Raabe 2. Jan 2017 14:51

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von stahli (Beitrag 1357762)
http://www.delphipraxis.net/1263046-post45.html
... könnten ja Tutorialschreiber mal drunter fallen ;-)

Meine Stimme hast du :thumb:

Delphi-Laie 2. Jan 2017 15:29

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Luckie (Beitrag 1357760)
Wennich eine Delphi Version hätte, die dies unterstützt. :?

Och, 10.1 ist sogar kostenlos und wird das bestimmt "schon" beherrschen.

a.def 2. Jan 2017 15:32

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1357777)
Zitat:

Zitat von Luckie (Beitrag 1357760)
Wennich eine Delphi Version hätte, die dies unterstützt. :?

Och, 10.1 ist sogar kostenlos und wird das bestimmt "schon" beherrschen.

Wollte ich eigentlich auch schreiben. Aber in 10.1 Starter fehlt leider der Debugger. Vielleicht auch Threading.

Uwe Raabe 2. Jan 2017 15:38

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von a.def (Beitrag 1357778)
Aber in 10.1 Starter fehlt leider der Debugger. Vielleicht auch Threading.

Nee, ist dabei.

Mavarik 2. Jan 2017 15:55

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von himitsu (Beitrag 1357707)
Also Threads lohnen sich nur, wenn der enthaltene Code mehr im Thread macht, als in der GUI.

Im "Normalfall" würde ich Dir nicht widersprechen.

Aber es stimmt für die mobilen Plattformen und FMX nicht.

Beispiel:

Delphi-Quellcode:
procedure TForm202.Button1Click(Sender: TObject);
begin
  Sleep(1000);
  Caption := '42';
end;

procedure TForm202.Button2Click(Sender: TObject);
begin
  TTask.Run(Procedure
    begin
      TThread.Queue(NIL,Procedure
        begin
          Sleep(1000);
          Caption := '42';
        end;
    end;    
end;
hat nicht das gleiche verhalten!

Besser wäre natürlich: 8-)

Delphi-Quellcode:
Uses
  Delphiprofi.FDK.Idleworker;

procedure TForm202.Button3Click(Sender: TObject);
begin
  TIdleworker.Default.Execute(
    Procedure
      begin
        Sleep(1000);
        Caption := '42';
      end,true);
end;

Uwe Raabe 2. Jan 2017 16:20

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Mavarik (Beitrag 1357782)
Delphi-Quellcode:
procedure TForm202.Button2Click(Sender: TObject);
begin
  TTask.Run(Procedure
    begin
      TThread.Query(NIL,Procedure
        begin
          Sleep(1000);
          Caption := '42';
        end;
    end;    
end;

Das ergibt aber überhaupt keinen Sinn. Zunächst ist mir
Delphi-Quellcode:
TThread.Query
völlig unbekannt. Sollte es sich dabei um
Delphi-Quellcode:
TThread.Queue
handeln, verlagerst du das
Delphi-Quellcode:
Sleep
ja wieder in den Hauptthread.

Ich hätte jetzt eher diesen Ansatz gewählt:

Delphi-Quellcode:
procedure TForm202.Button2Click(Sender: TObject);
begin
  TTask.Run(
    Procedure
    begin
      Sleep(1000);
      TThread.Query(NIL,
        Procedure
        begin
          Caption := '42';
        end;
    end;    
end;

Mavarik 2. Jan 2017 16:47

AW: Ist die Verwendung von TTask so korrekt?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1357786)
Das ergibt aber überhaupt keinen Sinn. Zunächst ist mir
Delphi-Quellcode:
TThread.Query
völlig unbekannt. Sollte es sich dabei um
Delphi-Quellcode:
TThread.Queue
handeln, verlagerst du das
Delphi-Quellcode:
Sleep
ja wieder in den Hauptthread.

Klar, sorry Schreibfehler...

Der Sinn ist ganz einfach.

Bei einem Button Klick oder anderen User-Aktionen, starten diese im UI-Thread einen Timer der die Änderungen auf dem Bildschirm (Mouseover/Buttondown/ButtonUp usw.) anzeigt.

Über den TTask.Run starte ich meine Aktionen verzögert. Der Queue Befehl sorgt dafür, dass ich dem UI_Thread die Ausführung überlasse.

Wie gesagt der bessere Weg hierfür ist der OnIdleEvent!

Zitat:

Zitat von Uwe Raabe (Beitrag 1357786)
Ich hätte jetzt eher diesen Ansatz gewählt:

Delphi-Quellcode:
procedure TForm202.Button2Click(Sender: TObject);
begin
  TTask.Run(
    Procedure
    begin
      Sleep(1000);
      TThread.Query(NIL,
        Procedure
        begin
          Caption := '42';
        end;
    end;    
end;

Logisch!!

Mavarik :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 3 von 3     123   

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