在Ubuntu C ++中检测键盘按下

时间:2015-01-05 18:03:47

标签: c++ ubuntu

Ubuntu中,我想编写一个C++程序,只要按下q键,该程序就会退出。在此之前,该计划继续运行。但是,我不想只是一个循环来检查每次迭代的输入,我想调用一个函数然后调用其他函数等。所以,我不能只是继续检查循环中的输入,因为永远不会重新访问该循环。我是否需要为此编写一个单独的线程,它检测键盘输入,或者我可以使用Ubuntu构建的东西吗?

2 个答案:

答案 0 :(得分:2)

这取决于您的程序运行的环境。

如果它在桌面上运行,它是一个GUI应用程序,您需要一些图形工具包,如QtGtk(以避免直接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;
}