![]() |
Ereignisse in verschiedenen Threads
Hallo,
ich habe zwei Threads:
Delphi-Quellcode:
Also die Threads sind quasi zwei Roboter die sich auf dem Spielfeld bewegen.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; 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: |
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. |
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... |
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