Ich möchte optional eine getChar
Aktion abbrechen.
Ich brauche folgende Funktion:
Bei abort <- getChar' callback
wird ein Zeichen von der Standardeingabe gelesen, es sei denn, abort
wird aufgerufen, bevor ein Zeichen verfügbar ist.
Wenn ein Zeichen gelesen wird, wird callback
damit aufgerufen.
Ich habe die folgende Prototypimplementierung:
%Vor% Das Problem ist, dass killThread
den Thread abbrechen kann, nachdem er das Zeichen gelesen hat, aber bevor ()
in MVar eingefügt wurde.
Ich habe keine Ahnung, wie ich dieses Problem lösen soll, ist das überhaupt möglich mit dem Basispaket? Wenn nicht, haben Sie eine ähnliche Funktion in anderen Paketen implementiert?
Ich denke, der einfachste Weg, dies zu erreichen, ist die Durchführung einer eigenen Pufferung. Hier ist ein einfacher Prototyp. Es wird davon ausgegangen, dass Sie launchIOThread
genau einmal in Ihrem Programm aufrufen. Es behandelt nicht EOF oder andere IO-Ausnahmen, aber das sollte einfach sein.
Sie möchten Ausnahmebehandlungskonstrukte verwenden, so dass der MVar unabhängig von Ausnahmen immer in einem sicheren Zustand verbleibt. Insbesondere möchten Sie wahrscheinlich withMVar
.