AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ist die Verwendung von TTask so korrekt?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist die Verwendung von TTask so korrekt?

Ein Thema von a.def · begonnen am 1. Jan 2017 · letzter Beitrag vom 2. Jan 2017
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#21

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 14:56
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 15:02
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...)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 2. Jan 2017 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#23

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 15:51
http://www.delphipraxis.net/1263046-post45.html
... könnten ja Tutorialschreiber mal drunter fallen
Meine Stimme hast du
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#24

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 16:29
Wennich eine Delphi Version hätte, die dies unterstützt.
Och, 10.1 ist sogar kostenlos und wird das bestimmt "schon" beherrschen.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#25

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 16:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#26

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 16:38
Aber in 10.1 Starter fehlt leider der Debugger. Vielleicht auch Threading.
Nee, ist dabei.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#27

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 16:55
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:

Delphi-Quellcode:
Uses
  Delphiprofi.FDK.Idleworker;

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

Geändert von Mavarik ( 2. Jan 2017 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#28

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 17:20
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 TThread.Query völlig unbekannt. Sollte es sich dabei um TThread.Queue handeln, verlagerst du das 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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#29

AW: Ist die Verwendung von TTask so korrekt?

  Alt 2. Jan 2017, 17:47
Das ergibt aber überhaupt keinen Sinn. Zunächst ist mir TThread.Query völlig unbekannt. Sollte es sich dabei um TThread.Queue handeln, verlagerst du das 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!

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 10:39 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