在Ubuntu
中,我想编写一个C++
程序,只要按下q
键,该程序就会退出。在此之前,该计划继续运行。但是,我不想只是一个循环来检查每次迭代的输入,我想调用一个函数然后调用其他函数等。所以,我不能只是继续检查循环中的输入,因为永远不会重新访问该循环。我是否需要为此编写一个单独的线程,它检测键盘输入,或者我可以使用Ubuntu构建的东西吗?
答案 0 :(得分:2)
这取决于您的程序运行的环境。
如果它在桌面上运行,它是一个GUI应用程序,您需要一些图形工具包,如Qt或Gtk(以避免直接X11编程)。您也可以考虑libsdl
如果它在终端中运行,您最好使用某些终端库,如ncurses(或者,如果您想要行版,readline)。另请阅读tty demystified网页。请注意,控制台tty可能是生的或熟的(在这种情况下,行缓冲部分发生在内核中!)。
您可能还需要一些event loop(但Qt会给您一个),所以请阅读poll(2)。
如果您不熟悉它,请阅读Advanced Linux Programming。
答案 1 :(得分:-1)
只需阅读stdin并检查它是否&#39; <&#39;
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
void workerFun(const bool& stopFlag)
{
//Do stuff
if stopFlag
return; // probably want to have some logic to clean up, save progress etc
}
int main()
{
bool flag = false;
//Start the worker in another thread
boost::thread workerThread(workerFun, std::ref<bool>(flag));
//Keep checking if the user wants to quit
do
{
cout<<"Enter q to quit"<<endl;
char input;
cin>>input;
flag = input == 'q' || input == 'Q'
} while (!flag);
//user want's to quit, wait for the worker to stop
workerThread.join();
cout << "Goodbye!"<<endl;
return 0;
}