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

标签 terminal console haxe getchar

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

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

最佳答案

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

测试.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 上测试过它。

@: matadata的用法可以在http://haxe.org/manual/cr-metadata.html找到

关于terminal - haxe cpp - 如何在终端应用程序中捕获 Ctrl+C 按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509092/

相关文章:

terminal - 如何为 Haxe 设置 Jeash?

inversion-of-control - 在 Haxe 中使用 Class<T> 作为 Map 键

android - 终端显示 "Sorry, could not find a PTY"怎么办? (Mac 操作系统)

linux - 在 linux 终端上用 rar 压缩成单独的存档

linux - 在 Linux 中使用 FFMPEG 覆盖 TS 流文件

objective-c - 如何在 Objective C 中编写日志文件?

c++ - 两行后 fstream 没有从文本文件中读取

iphone - Haxe 可以为 iOS 原生方法创建库吗?

linux - 如何在 Linux 中只打印目录中最大的文件?

windows - 如何在 Windows 的控制台输出上中断(设置断点)?