Hallo Experten!
Ich habe folgendes Problem:
Ich einen äußerst zeitkritischen Routine unter Windows NT 4.0 realisieren. Damit mir Windows nicht dazwischen funkt, muß ich die Priorität auf maximal setzten:
=> ThreadPriority=THREAD_PRIORITY_TIME_CRITICAL
=> PriorityClass=REALTIME_PRIORITY_CLASS
Solange ich diese Priorität benutze, läuft alles einwandfrei. Dummerweise muß ich dem Anwender die Möglichkeit geben, die Routine mit einem Tastendruck abzubrechen. Solange mein Programm aber mit dieser Priorität läuft, werden keine Windows-Nachrichten mehr verarbeitet. Die „normalen“ Windows-Mechanismen zur Tastatur-Abfrage (einschließlich GetAsyncKeyState) sind also lahmgelegt.
Bei einer niedrigeren Priorität, z.B. PriorityClass=HIGH_PRIORITY_CLASS, wird der Ablauf der Routine gelegentlich unterbrochen. Das kann ich mir nicht leisten
Ich habe es auch schon mit einer Nachrichtenpumpe versucht:
result=:eekMessage(&message,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE);
if (result)
{
::TranslateMessage(&message);
:ispatchMessage(&message);
}
Damit läuft GetAsyncKeyState wieder, aber die Nachrichtenpumpe „verschwendet“ 500 us… und das ist auch zu viel!
Gibt es eine Möglichkeit, die Tastatur ohne die Nachrichtenfunktionen abzufragen? Vielleicht über den Treiber „i8042prt.sys“?
Danke, daß Ihr den ganzen Kram bis hierher durchgelesen habt. Es wäre toll, wenn Ihr mir helfen könnt.
Gruß
Uwe