Software > Coding
Hilfe! evnt_multi() ignoriert Mausklick
Count:
--- Zitat von: mfro am Di 23.02.2021, 08:08:06 ---
--- Zitat von: Count am Di 23.02.2021, 08:05:47 ---
--- Zitat von: Chocco am Mo 22.02.2021, 20:43:46 ---Mit (event_ret & MU_TIMER) werden doch alle anderen Events ausgeblendet. Mit (event_ret == MU_TIMER) würden nur die ausschließlichen Timer Events abgegriffen.
--- Ende Zitat ---
Nach einer Nacht darüber schlafen, hast du natürlich recht. ;)
Aber das ist leider nicht die Ursache. evnt_multi() liefert wirklich erst beim zweiten Klicken das richtige Event MU_BUTTON zurück.
--- Ende Zitat ---
was hast Du konkret geändert?
--- Ende Zitat ---
Nichts. Ich schreibe das Ergebnis von evnt_multi() direkt in eine Datei und beobachte das. Und es wird alle 300 ms (CURSOR_BLINK_RATE) MU_TIMER (0x20) zurückgeliefert. Erst nach dem zweiten Mausklick MU_BUTTON (0x02).
mfro:
Hast Du das "continue" rausgemacht?
Count:
--- Zitat von: mfro am Di 23.02.2021, 08:20:24 ---Hast Du das "continue" rausgemacht?
--- Ende Zitat ---
Nein, ich habe die Bedingung in (evnt_ret == MU_TIMER) geändert.
Count:
Ich habe jetzt mal in einer Header-Datei, die von jeder Quelldatei eingebunden wird, das wind_update()-Makro umgebogen. Meine eigenen Header-Dateien werden immer erst nach den System-Headerdateien eingebunden, also auch immer nach <gem.h>.
--- Code: ---#undef wind_update
#define wind_update(a) my_wind_update(a)
void my_wind_update(short);
--- Ende Code ---
Die Funktion sieht so aus:
--- Code: ---void my_wind_update(short a)
{
static const char* what[] = { "END_UPDATE","BEG_UPDATE","END_MCTRL","BEG_MCTRL" };
FILE*f=fopen("A.TXT","a");
fprintf(f,"wind_update(%s)\n",what[a]);
fclose(f);
#undef wind_update
#define wind_update(a) mt_wind_update(a,aes_global)
wind_update(a);
}
--- Ende Code ---
Die Ausgabe in A.TXT zeigt keine Auffälligkeiten:
--- Code: ---wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
wind_update(BEG_UPDATE)
wind_update(BEG_MCTRL)
wind_update(END_MCTRL)
wind_update(END_UPDATE)
--- Ende Code ---
mfro:
--- Zitat von: Count am Di 23.02.2021, 08:44:56 ---
--- Zitat von: mfro am Di 23.02.2021, 08:20:24 ---Hast Du das "continue" rausgemacht?
--- Ende Zitat ---
Nein, ich habe die Bedingung in (evnt_ret == MU_TIMER) geändert.
--- Ende Zitat ---
Das ist dann zwar nicht die Ursache für dein Problem, aber trotzdem falsch. Das "continue" hat da nichts verloren, das "==" auch nicht.
Die AES führen bei evnt_multi() unterschiedliche Events, die "quasi-zeitgleich" auftreten, zusammen. Deine Event-Behandlung sollte also immer den Event (mit einer Abfrage auf das gesetzte Bit, also
--- Code: ---if (evnt & MU_....)
--- Ende Code ---
"rausfischen", den es bearbeiten möchte, aber weiterhin die Behandlung anderer Events *nicht* "abklemmen". Das "continue" macht aber genau das. Zusätzlich bearbeitest Du jetzt einen Timer-Event nur dann, wenn er alleine auftritt.
Mehr kann man erst sagen, wenn Du deinen angepassten Code noch mal zeigst.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln