AGB  ·  Datenschutz  ·  Impressum  







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

TThread: Synchronize() priorisieren?

Ein Thema von romber · begonnen am 29. Mär 2016 · letzter Beitrag vom 4. Apr 2016
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#1

AW: TThread: Synchronize() priorisieren?

  Alt 4. Apr 2016, 10:21
Bei mir werden die Threads automatisch freigegeben. Sollte der Thread zum Zeitpunkt des Aufrufs der Queue-Methode nicht mehr vorhanden sein, was wird denn aufgerufen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TThread: Synchronize() priorisieren?

  Alt 4. Apr 2016, 10:23
Bei mir werden die Threads automatisch freigegeben. Sollte der Thread zum Zeitpunkt des Aufrufs der Queue-Methode nicht mehr vorhanden sein, wie soll die Thread-Methode von Haupthread aufgerufen werden?
Deswegen sollst du ja auch nil als Parameter übergeben. Dann überlebt das Queue auch das Ende des Threads. Die übergebene Methode ist ja eine Anonyme Methode. Obwohl sie in deiner Thread-Methode deklariert wird, gehört sie damit nicht wirklich zu der Thread-Instanz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: TThread: Synchronize() priorisieren?

  Alt 4. Apr 2016, 10:30
Deswegen sollst du ja auch nil als Parameter übergeben. Dann überlebt das Queue auch das Ende des Threads. Die übergebene Methode ist ja eine Anonyme Methode. Obwohl sie in deiner Thread-Methode deklariert wird, gehört sie damit nicht wirklich zu der Thread-Instanz.
Ok, also doch als anonyme Methode. Etwa so?

Delphi-Quellcode:
TThread.Queue(nil, procedure()
                   begin
                     MachWas;
                   end);
Was ich gemeint habe, ist dass die Methode nicht als Teil des Threads deklariert werden darf:

Delphi-Quellcode:
type
  TMeinThread = class(TThread)
  //...
  protected
    procedure Execute; override;
    procedure DoDataChanged;
end;

procedure TMeinThread.Execute;
begin
  //..
  TThread.Queue(nil, DoDataChanged);
end;

procedure TMeinThread.DoDataChanged;
begin
  myCustomDataSource.DataChanged;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TThread: Synchronize() priorisieren?

  Alt 4. Apr 2016, 10:47
Ok, also doch als anonyme Methode. Etwa so?

Delphi-Quellcode:
TThread.Queue(nil, procedure()
                   begin
                     MachWas;
                   end);
Genau so! Allerdings darf MachWas dann auch nicht voraussetzen, daß die Thread-Instanz noch existiert, wenn du das nicht sicher stellen kannst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: TThread: Synchronize() priorisieren?

  Alt 4. Apr 2016, 10:50
Perfekt, vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:57 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