![]() |
asynchrone procedureausführung
Hallo,
wie kann ich eine Procedure asynchron ausführen? Also ein Thread soll eine im MainThread befindliche Procedure asynchron aufrufen. Wie geht das? Danke im Voraus. Gottes Segen! |
Re: asynchrone procedureausführung
Du musst nur über eine Variable auf den Hauptthread zugreifen und dann die Methode aufrüfen. Genauso wie Du auch FormXYZ.Show aufrufst.
Das mit dem asynchron kann halt nur alle möglichen Nebenwirkungen haben, über welche Du Dir im klaren sein musst, aber der generelle Aufruf stellt kein Problem dar. ...:cat:... |
Re: asynchrone procedureausführung
[EDIT]
Hab grad gesehen das ich DoOnSignal ja mit Synchronize aufrufen... Werd mal drüber schlafen und morgen dann weiter dran rumwerkeln. Falls ihr noch nen Tipp oder nen Tutorial habt wär ich auch dankbar... [/EDIT] Danke für die schnelle Antwort aber es funzt nit :!: :?: Ich hab noch recht wenig (null-) Plan vom Threading. Habe ich da vielleicht etwas falsch gemacht? -- sicher, or? :gruebel:... Hier mein Kot:
Delphi-Quellcode:
constructor TM32Thread.Create(Handle: THandle; Adress: Word; AOwner: TCustomMidi32);
begin FOwner := AOwner; FAdress := Adress; inherited Create(True); Priority := tpLowest;//tpTimeCritical; FHandle := Handle; Resume; end; //die Execute procedure: procedure TM32Thread.Execute; var oldState: Byte; begin repeat oldState := FStatus; FStatus := PortIn(FAdress); if oldState <> FStatus then begin Synchronize(DoOnSignal); end; until Terminated; end; //die DoOnSignal procedure: procedure TM32Thread.DoOnSignal; begin if NOT Configurated then begin FRightPedal := FStatus - 16; Configurated := True; Exit; end; if FStatus = FRightPedal + 16 then begin if Assigned(FOwner.FOnStop) then begin FOwner.FOnStop(Self); end; end else if FStatus = FRightPedal - 16 then begin if Assigned(FOwner.FOnPlay) then begin FOwner.FOnPlay(Self); end; end else if FStatus = FRightPedal - 32 then begin if Assigned(FOwner.FOnForward) then begin FOwner.FOnForward(Self); end; end else if FStatus = FRightPedal then begin if Assigned(FOwner.FOnReward) then begin FOwner.FOnReward(Self); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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