我有一个简单的程序,它启动一个循环计时器,然后进入解析任何输入数据的getline循环。但是,每当定时器信号出现时,它就会结束getline函数,看起来好像用户按下了enter。如何阻止信号这样做?或者如果不这样做,我如何区分真正的返回信号和信号?后者不太理想,因为我必须在400Hz下运行这个微分代码。
以下是我目前用于获取一行的代码。空白输入将重新打印APP>行,而任何其他输入都通过。
do
{
std::cin.clear();
line.clear();
std::cout << "APP > ";
std::getline(std::cin, line);
}
while (line.length() == 0);
全部谢谢
马特
答案 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";
}