haxe cpp - 如何在终端应用程序中按Ctrl + C键?

时间:2014-02-02 09:41:33

标签: terminal console haxe getchar

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

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

1 个答案:

答案 0 :(得分:3)

Haxe不在std lib中提供此功能。但是,您可以使用原始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');
            }
        }
    }
}

请注意,我只在Mac上测试过它。

可以在http://haxe.org/manual/cr-metadata.html

找到@:元数据的使用情况