std::getline and posix signals

std::getline and posix signals

本文关键字:signals posix getline std and      更新时间:2023-10-16

我有一个简单的程序,该程序启动了一个重复的计时器,然后安置在getline循环中,以解析任何输入数据。但是,每当发生计时器信号时,它将结束getline函数,看起来好像用户已按Enter。如何停止这样做的信号?还是失败了,我如何区分真正的返回按下和信号?后者是不太希望的,因为我将不得不在400Hz上运行此差异化代码。

以下是我目前正在使用的代码。空白输入将重印应用程序>行,而任何其他输入通过。

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

谢谢所有

马特

您不检查std::cin的状态。我想知道在警报响起后是否设置了故障问题。

我不明白您的问题,也无法再现它。以下程序从stdin正确读取处理信号;两者都不妨碍对方:

#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";
}