Ich musste das einfach mal probieren, denn - soweit ich weiss ist der kleinste timeout wert bei einem evnt_multi 20ms ( jedenfalls ist es das bei evnt_timer laut Profibuch für den ST).
Es geht ganz einfach... vor dem aufruf zu event_multi einfach ein appl_write mit einer "Benutzerdefinierten" Nachricht schicken, schon kehrt evnt_multi sofort zurück.
pseudo C code:
/* Definition einer Nachricht, 80 ist der groesste von GEM genutzt Wert..., also sollte es ok sein 100 fuer eigene zwecke zu nutzen, wer's wissen will, muss im Kompendium schauen :) */
#define WM_USER_1 100
int app_id;
WORD mymsg[8]; /*8 WORDS = 16 bytes)
app_id = appl_init();
...
mymsg[0] = app_id;
mymsg[1] = WM_USER_1;
mymsg[2] = 0; /* keine ueberlaenge */
while( !quit)
{
appl_write( app_id, 16, &mymsg);
evnt_mult( ... ) ; /* kehrt sofort zurueck, EVNT_TIMER muss nicht angegeben werden, jedoch MU_MESG */
}
Es ist natürlich so, das diese Methode zur höchstmöglichen Prozessorauslastung führt solange der Prozess noch nicht vom Prozessmanager "pausiert" wurde. Ich weiss nicht genau wie relevant das auf den Multi-Tasking OS beim Atari ist... bei Windows würde diese Verfahren, sofern evnt_multi in einer endlos-schleife aufgerufen wird zu 100% prozessorauslastung führen. Aber ich glaube auf dem Atari ist das nicht ganz so schlimm, evnt_multi mit dem normalen timeout wird ja auch irgendwas in der zwischezeit machen, bevor der timeout auftritt...
Tortzdem sollte man den Prozess schlafen legen - , auf dem FreeMint system geht das mit z.B: usleep( 5*1000); für 5 ms.
Wofür man das braucht... ? Wenn man wirklich nur sehr kleine Delays haben will, bevor ein Event ausgewertet wird.
Ich zumindest finde es gut zu wissen...
Gruß,...