Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Thread synchronize (https://www.delphipraxis.net/113138-thread-synchronize.html)

max2621 3. Mai 2008 09:57


Thread synchronize
 
Hallo,

ich habe ein Problem mit dem Zugriff auf die Main Unit aus einem Thread. Soweit ich verstanden habe, kann ich auf visuelle Komponenten nur über synchronize zugreifen. Leider gelingt es mir aber nicht auf ein Label in der Main unit zuzugreifen.

Mein Versuchscode ( nur der Thread) lautet folgendermaßen:

Delphi-Quellcode:

unit meinthread;

interface

uses
  Classes, sysutils, windows;

type
  test = class(TThread)
  private
    { Private-Deklarationen }
    j: integer;
  protected
    procedure Execute; override;
    procedure getresult;
  public
    constructor create; virtual;
  end;
implementation

procedure test.GetResult;
begin
Form1.label1:='Test';
end;

procedure test.Execute;
begin
{ Thread-Code hier einfügen }
sleep(1000);
windows.beep(2000,50);
Synchronize(Getresult);

end;

constructor test.create;
begin
inherited create(true); // CreateSuspended = true
freeOnTerminate := true;
end;

end.

Die Procedure Test.Result findet den label1 auf Form1 nicht.

Was mache ich falsch?

Euer Max2621

max2621 3. Mai 2008 10:00

Re: Thread synchronize
 
Sorry der Quellcode ist nicht richtig dargestellt. Ich hoffe jetzt:

Delphi-Quellcode:
unit meinthread;

interface

uses
  Classes, sysutils, windows;

type
  test = class(TThread)
  private
    { Private-Deklarationen }
    j: integer;
  protected
    procedure Execute; override;
    procedure getresult;
  public
    constructor create; virtual;
  end;

implementation

procedure test.GetResult;
begin

end;

procedure test.Execute;
begin
  { Thread-Code hier einfügen }
  sleep(1000);
  windows.beep(2000,50);
  Synchronize(Getresult);

end;

 constructor test.create;
begin
  inherited create(true); // CreateSuspended = true
  freeOnTerminate := true;
end;

end.

bluesbear 3. Mai 2008 10:05

Re: Thread synchronize
 
Form1 ist vom Typ TForm, da gibts das Label nicht. Du musst einen Typecast machen.

max2621 3. Mai 2008 10:16

Re: Thread synchronize
 
Vielen Dank. Aber wie geht das.

In der procedure test,getrewsult habe ich zur Zeit folgendes stehen:

Delphi-Quellcode:
procedure test.GetResult;
begin
  form1.label1:='test';
end;
vielen Dank.

fnhofm 3. Mai 2008 10:24

Re: Thread synchronize
 
Morgen,

hast Du das Mainform in der uses vom Thread stehen?
Und dem Label weist Du einen Text über seine Eigenschaft Caption zu.
Delphi-Quellcode:
Form1.Label1.Caption := 'Test';
Gruß

jaenicke 3. Mai 2008 10:54

Re: Thread synchronize
 
Zitat:

Zitat von fnhofm
hast Du das Mainform in der uses vom Thread stehen?

Er hat den Quelltext ja gepostet, da steht die Unit ja nicht drin.

Zitat:

Zitat von max2621
Die Procedure Test.Result findet den label1 auf Form1 nicht.

Du solltest dir Fehlermeldungen besser anschauen. Dort steht nicht, dass er den Label nicht findet, sondern, dass Form1 nicht gefunden wird.
(Eben weil du die Unit, in der Form1 definiert ist, nicht unter uses in die Liste geschrieben hast, weshalb Delphi auch nicht in dieser Unit nach Form1 sucht.)

Du musst unterhalb von implementation nochmal hinschreiben uses Unit1; bzw. eben wie du deine Unit genannt hast.

max2621 3. Mai 2008 11:03

Re: Thread synchronize
 
Zunächst einmal vielen Dank.
Wenn ich die Unit reinschreibe und kompiliere kommt folgende Fehlermeldung:

[DCC Fehler] uPiepsThread.pas(7): F2047 Zirkuläre Unit-Referenz auf 'uPiepsThread'

Meine Main Unit heißt upiepsthread.

Er findet auch label3 nicht.

Vielen Dank bisher

fnhofm 3. Mai 2008 11:28

Re: Thread synchronize
 
Binde die Unit des Hauptformulars unter implementation ein. Nach dem Schlüsselwort implementation. Wie jaenicke übrigens schon gesagt hat.
Gruß

max2621 3. Mai 2008 11:43

Re: Thread synchronize
 
Wieder nur halb gelesen, nach aufführen der unit unterhalb von implementation gehts!!

Vielen Dank für Eure Hilfe!!

Max2621


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