AGB  ·  Datenschutz  ·  Impressum  







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

Synchronize IdThreadComponent

Ein Thema von Dembo · begonnen am 15. Feb 2014 · letzter Beitrag vom 15. Feb 2014
Antwort Antwort
Dembo

Registriert seit: 5. Jan 2014
3 Beiträge
 
#1

Synchronize IdThreadComponent

  Alt 15. Feb 2014, 13:18
Delphi-Version: XE5
Hallo,
das Problem ist die "In-Place-Methode" die bei Synchronize aufgerufen wird!
Hat einer eine Lösung da?


Delphi-Quellcode:
unit Thread_Syn;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  IdBaseComponent, IdThreadComponent, FMX.Layouts, FMX.ListBox;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdThreadComponent1: TIdThreadComponent;
    Label1: TLabel;
    procedure IdThreadComponent1Run(Sender: TIdThreadComponent);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdThreadComponent1.Start;
end;

procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent);
var
  Text: String;
begin
  Text := 'Test!!';
  IdThreadComponent1.Synchronize(
    procedure
    begin
      Label1.Text := Text;
    end);
  IdThreadComponent1.Stop;
end;

end.
Fehlermeldung

[DCC Fehler] Thread_Syn.pas(41): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Synchronize IdThreadComponent

  Alt 15. Feb 2014, 13:26
Das Ding will nunmal nur eine Objekt-Methode, also mußt du auch Eine übergeben, so wie es dir die Fehlermeldung auch sagt.

Zitat:
Delphi-Quellcode:
procedure TIdThreadComponent.Synchronize(AMethod: TThreadMethod); // <<<<<< TThreadMethod !!!
begin
  FThread.Synchronize(AMethod);
end;
PS:
Delphi-Quellcode:
TThread.Synchronize(nil, procedure
  begin
    ...
  end);
Falls die Indy-Leute in neueren Versionen (nach XE3) es endlich geschafft haben auch die generischen Methoden durchzureichen, oder den interen TIdThreadEx zugänglich machen, dann kannst du natürlich auch diese verwenden.

Und statt IdThreadComponent1 solltest du im IdThreadComponent1Run auch besser den Sender verwenden. (aus dem Selben Grund, warum man nicht innerhalb von TForm1 das Form1 verwendet)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Feb 2014 um 13:37 Uhr)
  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 19:55 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