std :: getline和posix信号

时间:2012-11-09 20:25:41

标签: c++ timer posix getline

我有一个简单的程序,它启动一个循环计时器,然后进入解析任何输入数据的getline循环。但是,每当定时器信号出现时,它就会结束getline函数,看起来好像用户按下了enter。如何阻止信号这样做?或者如果不这样做,我如何区分真正的返回信号和信号?后者不太理想,因为我必须在400Hz下运行这个微分代码。

以下是我目前用于获取一行的代码。空白输入将重新打印APP>行,而任何其他输入都通过。

do
    {
        std::cin.clear();
        line.clear();
        std::cout << "APP > ";
        std::getline(std::cin, line);
    }
    while (line.length() == 0);

全部谢谢

马特

2 个答案:

答案 0 :(得分:0)

您不检查std::cin的状态。我想知道在闹钟响起后是否设置了failbit。

答案 1 :(得分:0)

我不明白你的问题,也不能重现它。以下程序正确地从标准输入读取处理信号;两者都不妨碍另一方:

#include <csignal>
#include <cstdlib>
#include <string>
#include <iostream>

void handle(int n)
{
    static unsigned int count = 0;

    std::cout << "Signal: " << n << std::endl;  // not safe, I know...

    if (++count == 5)
    {
        std::cout << "Too many signals, goodbye!\n";
        std::exit(0);
    }
}

int main()
{
    std::signal(SIGINT, handle);

    for (std::string line; std::getline(std::cin, line); )
    {
        std::cout << "You said: " << line << std::endl;
    }

    std::cout << "End of input, goodbye!\n";
}