我已经制作了通过 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/