AGB  ·  Datenschutz  ·  Impressum  







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

Ereignisse in verschiedenen Threads

Ein Thema von Angel4585 · begonnen am 23. Okt 2006 · letzter Beitrag vom 16. Feb 2007
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Ereignisse in verschiedenen Threads

  Alt 23. Okt 2006, 10:42
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?

Danke schonmal

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Sangoku

Registriert seit: 13. Jan 2006
10 Beiträge
 
#2

Re: Ereignisse in verschiedenen Threads

  Alt 16. Feb 2007, 12:53
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Ereignisse in verschiedenen Threads

  Alt 16. Feb 2007, 13:11
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...
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ereignisse in verschiedenen Threads

  Alt 16. Feb 2007, 13:49
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
  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 12:09 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