![]() |
wiedermal funzt synchronize im TThread nicht
Hallo,
ich weiß zu diesem Thema gibt es 1000de Beispiele auf dieser Seite. Ich habe auch versucht mich exakt an diese zu halten aber am Ende bleibt mein Synchronize im TThread anscheinend für meinen Compiler unbeachtet, zumindest in sofern dass er nur 1mal (anscheinend ausgeführt wird). Folgendes steht in meiner Excecute-procedure im TThread:
Delphi-Quellcode:
die Form3.Sync:
Type TControlCardControlThread = class(TThread)
... protected procedure Execute; override; // ist override ... end; procedure TControlCardControlThread.Execute; var c, iIndex: integer; //TempTisch: TTischInfo; //Punkte, Geschwindigkeiten, Beschleunigungen: array[1..3] of double = [0,0,0]; begin repeat c := GetTickCount; Synchronize(Form3.Sync); c := {interval}50 - (GetTickCount - c); if c > 0 then Sleep(c); until Terminated;
Delphi-Quellcode:
Meiner Meinung nach sollte ich jetzt alles beachtet haben, was ich so in mehreren anderen Threads hier in der DP beachten, was ich beachten sollte (Excecute-Procedure ist override, repeat ... until Terminated, Trennung des TThread von den visuellen Komponenten des Hauptthreads), denke ich. Warum wird beim Debuggen dann aber die Sync-Procedure nur 1 mal ausgeführt? :gruebel:
procedure TForm3.Sync;
var i: Integer; begin for i := 1 to 2 do Form3.LoadProgressBarValue(i, ReadanalogChannel(i)); for i := 1 to 5 do Form3.CheckBoxCheck(i+8, (not ReaddigitalChannel(i))); if ReadDigitalChannel(5) then Form2.EingangsSignal[1] := 256 else Form2.EingangsSignal[1] := 0; end; Hoffe ihr könnt mir wieder helfen. BAMatze |
Re: wiedermal funzt synchronize im TThread nicht
Delphi-Quellcode:
Ist es nicht so, dass eine Methode des Thread "synchronisiert" werden sollte.
Type
TControlCardControlThread = class(TThread) private procedure updateForm3; ... protected procedure Execute; override; // ist override ... end; procedure TControlCardControlThread.updateForm3; begin Form3.sync; end; procedure TControlCardControlThread.Execute; var c, iIndex: integer; //TempTisch: TTischInfo; //Punkte, Geschwindigkeiten, Beschleunigungen: array[1..3] of double = [0,0,0]; begin repeat c := GetTickCount; Synchronize(updateForm3); c := {interval}50 - (GetTickCount - c); if c > 0 then Sleep(c); until Terminated; Vielleicht klappt esja mit den Änderungen oben. Grüße Klaus |
Re: wiedermal funzt synchronize im TThread nicht
@Klaus leider keine Änderung.
|
Re: wiedermal funzt synchronize im TThread nicht
Wenn Du einen Haltepunkt in Form3.sync setzt
wird dann während der Ausführung dort nur einmal angehalten? Sehr merkwürdig. Grüße Klaus |
Re: wiedermal funzt synchronize im TThread nicht
Zitat:
|
Re: wiedermal funzt synchronize im TThread nicht
Zitat:
[edit] oder wird der Thread irgendwo suspendiert? Grüße Klaus |
Re: wiedermal funzt synchronize im TThread nicht
Das könnte helfen (wobei es ungewöhnlich ist das nur ein einziger Event durchkommt):
Delphi-Quellcode:
Dadurch wird die Synchronisieranforderung direkt an Form3 gesendet.
procedure TForm3.FormCreate(Sender: TObject);
begin WakeMainThread := Wake; end; procedure TForm3.Wake(Sender: TObject); begin PostMessage(Handle, WM_NULL, 0, 0); end; procedure TForm3.FormDestroy(Sender: TObject); begin WakeMainThread := Application.WakeMainThread; end; MfG, Dirk |
Re: wiedermal funzt synchronize im TThread nicht
Hi BAMatze,
wie und wo erstellst Du die Instanz Deines Threads? Gruß Assertor |
Re: wiedermal funzt synchronize im TThread nicht
Also erstmal danke an alle für eure Beiträge, bin jetzt erst zu Hause angekommen.
Der TThread wird am Anfang mit einer Komponente erzeugt, welche das ControlBord steuert, welche die analogen Signale an das Programm schickt. Dieser TThread wird erst am Ende, wenn diese Komponente terminiert wird aufgelöst. @Tryer werde deinen Quellcode morgen mal ausprobieren, danke. Vielen Dank BAMatze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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