AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

asynchrone procedureausführung

Ein Thema von Meta777 · begonnen am 16. Feb 2005 · letzter Beitrag vom 16. Feb 2005
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

asynchrone procedureausführung

  Alt 16. Feb 2005, 09:14
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!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: asynchrone procedureausführung

  Alt 16. Feb 2005, 09:25
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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: asynchrone procedureausführung

  Alt 16. Feb 2005, 23:12
[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? ...

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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 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