Terminal haxe cpp-如何捕捉Ctrl+;终端应用中的C键按下?

Terminal haxe cpp-如何捕捉Ctrl+;终端应用中的C键按下?,terminal,console,haxe,getchar,Terminal,Console,Haxe,Getchar,我制作了一个终端应用程序,它通过Sys.getChar()获取键盘输入。在收集命令字符时,我可以捕获任何系统键代码,如Ctrl+C并对其进行处理。但当我在输入命令后运行大量计算时,按下任何Ctrl+C键都会立即中止应用程序 我想捕捉Ctrl+C,不仅在终端输入模式下,而且在内部函数为有效中断处理而运行时。方法Sys.getChar()无法执行此操作,因为它正在阻塞。是否有任何方法可以捕获全局应用程序中止事件或无缝读取键盘缓冲区而不阻塞运行时进程?Haxe在std库中不提供此功能。但是,您可以使用

我制作了一个终端应用程序,它通过Sys.getChar()获取键盘输入。在收集命令字符时,我可以捕获任何系统键代码,如Ctrl+C并对其进行处理。但当我在输入命令后运行大量计算时,按下任何Ctrl+C键都会立即中止应用程序


我想捕捉Ctrl+C,不仅在终端输入模式下,而且在内部函数为有效中断处理而运行时。方法Sys.getChar()无法执行此操作,因为它正在阻塞。是否有任何方法可以捕获全局应用程序中止事件或无缝读取键盘缓冲区而不阻塞运行时进程?

Haxe在std库中不提供此功能。但是,您可以使用原始cpp代码来执行此操作

Test.hx:

@:headerCode("#include <csignal>")
@:cppFileCode("
void _handler(int sig) {
    Test_obj::handler(sig);
}
")
class Test {
    static var sig:Int = -1;
    static function handler(_sig:Int):Void {
        sig = _sig;
    }
    static function main():Void {
        untyped __cpp__("signal(SIGINT, &_handler);");
        while (true) {
            Sys.sleep(0.1); //reduce cpu usage
            switch (sig) {
                case -1:
                    //there is no signal received yet
                case 2:
                    trace("ctrl-c is pressed.");
                    Sys.exit(0);
                default:
                    trace('Got signal: $sig');
            }
        }
    }
}
@:headerCode(“包含”)
@:cppFileCode(“
无效处理程序(int sig){
测试对象:处理器(sig);
}
")
课堂测试{
静态变量sig:Int=-1;
静态函数处理程序(_sig:Int):Void{
sig=_-sig;
}
静态函数main():Void{
非类型化的cpp(“信号(SIGINT,&U处理程序”);
while(true){
Sys.sleep(0.1);//减少cpu使用
开关(sig){
案例1:
//还没有收到任何信号
案例2:
跟踪(“按下ctrl-c”);
系统出口(0);
违约:
跟踪('Got信号:$sig');
}
}
}
}
注意,我只在Mac上测试过它

有关
@:
matadata的用法,请访问