[英]non-blocking io function instead of cin.get()
我有一個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#發送到我的控制台應用程序進程?
使用_getch()
cin.get()
。 它是一個阻塞命令,但只有if ( _kbhit() )
它才會立即返回時執行它。
這里找到一個非常簡單的答案: C ++中線程的簡單示例 。 積分歸Edward Kmett所有。
我碰巧在c ++應用程序中使用boost庫,所以我也可以使用boost thread實現。 這很簡單,這就是我的線程函數的樣子:
bool stopped=false;
void inputSent() //
{
if (kbhit() || (cin.get() > 0))
stopped=true;
}
后來在main.cpp中:
boost::thread stoppedThread = boost::thread(inputSent);
之后我只檢查是否停止== true,我沒有使用stoppedThread.join(我不知道是不是這個錯誤,因為我不知道程序什么時候結束,如果我要離開僵屍線程背后......也許有人可以啟發我這個)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.