|
 |
 |
 |
|
|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Menzel, Frank IT-OO4
Datum: Mi, 05.04.2006 12:59:01
Genau das habe ich so in allen Varianten probiert, sind die 100 ms noch nicht erreicht, dann aus aus dem Verhalten bot_goto raus.
Geht aber auch nicht so ohne weiteres, weil im folgenden die Speedwerte gesetzt werden müssen. Passiert dies nicht, wird Stop gesetzt...
achiem
-----Original Message-----
From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Ansgar Esztermann
Sent: Wednesday, April 05, 2006 12:52 PM
To: Entwicklung rund um den c't-bot
Subject: delay() (was: [ct-bot] Auswählen von Screens ohne Farb-Tasten auf der FB)
Hallo,
> Aber für komplexere Dinge müssen erst einmal die grundsätzlichen Dinge in den Griff bekommen werden. So klappt es bei mir (bei Euch sicher auch nicht) z.B. nicht, ein funktionierendes bot_goto Verhalten zu haben mit gleichzeitig richtig zählender Maus. Beides einzeln wunderbar. Bot_goto muß aber das delay(10), was wohl 100 ms Wartezeit bedeutet, haben. Die Maus darf das delay nicht haben. Und hier genau bin ich am Verzweifeln, siehe dazu:
Ich hatte schonmal vorgeschlagen, dafür die delay()-Implementierung zu ändern. Ich bin aber auch nicht dazu gekommen, mir da weitere Gedanken zu machen.
Die Idee ist die, daß man Prozessorzeit nicht sinnlos verbrät, sondern stattdessen aus dem Verhalten herausspringt und zunächst die anderen Verhalten abarbeitet, indem man für jedes Verhalten zusätzlich eine Variable delay_until mitführt. Das Verhalten wird dann erst wieder angesprungen, wenn diese Zeit erreicht (oder überschritten) ist.
Wenn man nicht direkt eine komplette Thread-Verwaltung aufbauen will (m.E. übertrieben), müßte sich jedes Verhalten dann noch selbst darum kümmern, bei erneutem Aufruf das richtige zu machen (also ggf. weiter unten die Arbeit fortzusetzen):
void tu_was()
{
if (delay_until)
{
delay_until = 0; /* Aufruf bei jeder Runde durch die Verhalten */
goto weiter;
}
... /* Arbeit */
if (bedingung)
{
delay_until = now()+10; /* Annahme: es gibt eine Systemzeit in ms */
return;
}
weiter:
... /* Arbeit */
}
A.
--
Ansgar Esztermann
Researcher & Sysadmin
http://www2.thphy.uni-duesseldorf.de/~ansgar
Confidentiality note:
The information in this email and any attachment may contain confidential and proprietary information of Heidelberger Druckmaschinen AG and/or its affiliates and may be privileged or otherwise protected from disclosure. If you are not the intended recipient, you are hereby notified that any review, reliance or distribution by others or forwarding without express permission is strictly prohibited and may cause liability. In case you have received this message due to an error in transmission, we kindly ask you to notify the sender immediately and to delete this email and any attachment from your system.
|
|
|