Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ereignisse in verschiedenen Threads (https://www.delphipraxis.net/79469-ereignisse-verschiedenen-threads.html)

Angel4585 23. Okt 2006 10:42


Ereignisse in verschiedenen Threads
 
Hallo,

ich habe zwei Threads:

Delphi-Quellcode:

TMyEreignis = procedure of object;

TMyThread = class(TThread)
  private
    X : Integer;
    Y : Integer;
    procedure MyEreignis;
  public
    Ereignis : TMyEreignis;
    procedure Execute;override;
    procedure Move;
    procedure TuWasAnderes;
  end;

var
  t1,t2 : TMyThread;


procedure TMyThread.Execute;
begin
//Irgendwas tun
end;

procedure TMyThread.Move;
begin

end;

procedure TMyThread.TuWasAnderes;
begin

end;

procedure TMyThread.MyEreignis;
begin

end;
Also die Threads sind quasi zwei Roboter die sich auf dem Spielfeld bewegen.

Wenn ein Roboter jetzt in der Prozedur "Move" ist, kann es passieren, dass er mit dem anderen Roboter kollidiert, was wiederum bei beiden das Ereignis auslösen soll.

Mein problem ist jetzt, wie schaffe ich es das der andere Thread der sich nicht in der Move-prozedur befindet das mitbekommt das er angefahren wurde? Die Ereignisse sollen ja "zeitgleich" stattfinden, also kann ich nicht die Prozedur von einem Roboter aus dem anderen Roboter aufrufen :(

Weis jemand wie ich das lösen kann, das der zweite(angefahrene) Roboter das mitbekommt und sofort "selbstständig" darauf reagiert? :gruebel:

Danke schonmal

:angel:

Sangoku 16. Feb 2007 12:53

Re: Ereignisse in verschiedenen Threads
 
Hallo,

ziemlich interessant deine Thematik. Ich würde dir raten eine dritte, "überwachende" Einheit einzubinden, welche
permanent die X,Y Koordinaten deiner Roboter überprüft.

Eine andere Möglichkeit wäre es, deine Roboter beim Erstellen in eine Objektliste einzubinden, damit jeder Roboter über diese Liste
die X, Y Koordinaten seiner Mitstreiter mit den seinen vergleichen kann.

Um diese Kollisionsabfrage noch zu verbessern, solltest du die Höhe und die Breite deiner Roboter mit einbeziehen,
damit du ihre Gesamtfläche überwachen kannst.

shmia 16. Feb 2007 13:11

Re: Ereignisse in verschiedenen Threads
 
Das Bewegen kann ja nicht in Null-Zeit stattfinden.
Wenn Robbi-A sich von Spiel-Feld 1 nach Feld 2 bewegt möchte, dann prüft er zuerst ob
Feld 2 schon belegt ist.
Falls ja, dann dürfte für ihn das Feld tabu sein.
Ein Feld kann aber auch teilweise belegt sein (1% bis 99%) weil z.B. ein anderer Roboter seinen Metallkadaver gerade auf das gleiche Feld bewegt.
Bei teilweiser Belegung würde dein Fall "double move collision" eintreten.
Der Roboter mit höherem Belegungsgrad könnte den Anderen vom Feld kicken oder beide bekommen einen elektrischen Schlag...

stahli 16. Feb 2007 13:49

Re: Ereignisse in verschiedenen Threads
 
Allo Angel4585,

ich habe mit Threads nur mal etwas getestet, aber nach meinem Verständnis startet man ja nicht für jeden Roboter einen eigenen Thread, da diese eher begrenzt sind.

Also kannst Du in Deinem Thread eine Menge von Robotern NACHEINANDER steuern bzw. handeln lassen. Ein ein Roboter einen anderen anstubbst ;-) sollte dieser dem angestubbsten gleich bescheid geben, so dass der sofort reagiert...

Während Deine Roboter hin- und herflitzen, kann Dein Programm nebenher schon mal was anderes erledigen. Wenn Du 100 Roboter hast, kannst Du nicht jeden in einem eigenen Thread behandeln...

(denke ich mal so)

Stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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