Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi asynchrone procedureausführung (https://www.delphipraxis.net/40467-asynchrone-procedureausfuehrung.html)

Meta777 16. Feb 2005 09:14


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!

sakura 16. Feb 2005 09:25

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:...

Meta777 16. Feb 2005 23:12

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 17:56 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