![]() |
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:
implementationunit 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; 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 |
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. |
Re: Thread synchronize
Form1 ist vom Typ TForm, da gibts das Label nicht. Du musst einen Typecast machen.
|
Re: Thread synchronize
Vielen Dank. Aber wie geht das.
In der procedure test,getrewsult habe ich zur Zeit folgendes stehen:
Delphi-Quellcode:
vielen Dank.
procedure test.GetResult;
begin form1.label1:='test'; end; |
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:
Gruß
Form1.Label1.Caption := 'Test';
|
Re: Thread synchronize
Zitat:
Zitat:
(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. |
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 |
Re: Thread synchronize
Binde die Unit des Hauptformulars unter implementation ein. Nach dem Schlüsselwort implementation. Wie jaenicke übrigens schon gesagt hat.
Gruß |
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