我有一个 C++ 控制台应用程序,它有一个选项可以通过按任意键来中断(通过使用 kbhit() 实现),在这种情况下,它会打印它所做的并退出(或者可以留下来完成工作(一些录音)并且仍然打印反馈)。我正在为该控制台应用程序制作一个 c# gui 应用程序(我正在从 c# 表单调用 exe 文件),而不是按键盘上的任何键,我使用的是“停止”按钮,它发送 Environment.NewLine(或“\n ") 到重定向的输入,在 C++ 应用程序中,我现在必须使用不同于 kbhit() 的东西才能工作。我尝试使用 cin.get(),例如:
if (kbhit() || (cin.get() > 0))
stop_recording=true;
但 cin.get() 是一个阻塞函数,如果我想让控制台应用程序运行到最后,它不会在不按停止按钮的情况下关闭。是否有任何类似于 cin.get() 的函数实际上没有阻塞,或者可能有不同的方式将“任意键”从 c# 发送到我的控制台应用程序进程?
最佳答案
使用 getch()
代替 cin.get()
。
它是一个阻塞命令,但仅通过执行它 if ( kbhit() )
它会立即返回。
关于c# - 非阻塞 io 函数而不是 cin.get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285608/