【发布时间】:2012-05-04 08:43:29
【问题描述】:
我有一个 c++ 控制台应用程序,它可以选择通过按任意键(通过使用 kbhit() 实现)来中断,在这种情况下,它会打印它所做的事情并退出(或者可以留下来完成工作(一些录音)并且仍然打印反馈)。我正在为该控制台应用程序制作 ac# gui 应用程序(我正在从 c# 表单调用 exe 文件),而不是按键盘上的任何键,我正在使用发送 Environment.NewLine (或“\n ") 到重定向的输入,在 c++ 应用程序中,我现在必须使用与 kbhit() 不同的东西才能使其工作。我尝试使用 cin.get(),例如:
if (kbhit() || (cin.get() > 0))
stop_recording=true;
但是 cin.get() 是一个阻塞函数,如果我想让控制台应用程序运行到最后,它不会在不按停止按钮的情况下关闭。是否有任何类似于 cin.get() 的函数实际上没有阻塞,或者可能是从 c# 向我的控制台应用程序进程发送“任意键”的不同方式?
【问题讨论】:
-
能否使用其他 Windows 同步方法,例如命名为 Mutex 或 Semaphore?
-
您有权访问此 C++ 控制台应用程序源代码吗?因为如果你这样做了,你可以通过线程来实现它:首先你会创建一个线程,它总是用 cin.get() 监听键盘,然后你会在一个单独的线程上运行应用程序的其余部分。这样您的应用程序就不会被阻止。
-
@AlexeiLevenkov:是的,我在 c++ 控制台应用程序中有一些信号量,但我不知道这会有什么帮助。
-
@Komyg:我可以访问 c++ 控制台应用程序源代码,我应该对其进行修改以使其能够工作。关于线程的有趣想法,我可以尝试,但代码不是我编写的,而且有点复杂,所以我必须真正研究它才能使其工作。另外,我希望它不会破坏应用程序的功能。
标签: c# c++ io nonblocking