std::getline and posix signals
std::getline and posix signals
我有一个简单的程序,该程序启动了一个重复的计时器,然后安置在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";
}
相关文章:
- POSIX open() 挂在 SMB 共享上
- C/C++:POSIX 兼容方式查找默认网络接口上/下
- 使用Boost async_read和POSIX::stream_descriptor从键盘读取
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 如何使用 signals.boostv2 调用特定插槽
- 强大的 rwlock 在 posix
- 父进程和子进程之间的 POSIX 信号量
- POSIX C/C++日志文件(VEX V5 Brain)
- 适用于win32、linux、mac的POSIX C包装器
- POSIX 条件变量和互斥体"竞争"
- 如何在C++中挂起和恢复 POSIX 线程?
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- Posix 线程类和启动例程 (pthread)
- 从串行端口(POSIX)读取十六进制值
- 有没有一个 posix lstatat 调用这样的事情
- 为 posix recv 设置超时会导致 udp 数据包丢失吗?
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 当多个进程使用该段时,Posix 共享内存使用 mremap 调整大小
- std::getline and posix signals