我想在c ++中通过getline()
从命令行读取一个字符串。
为此,我想添加一个5
秒的计时器。如果没有读取字符串,则程序将终止。
我该怎么做?
答案 0 :(得分:8)
好的,等待5
秒和terminate
如果没有输入:
#include <thread>
#include <atomic>
#include <iostream>
#include <string>
int main()
{
std::atomic<bool> flag = false;
std::thread([&]
{
std::this_thread::sleep_for(std::chrono::seconds(5));
if (!flag)
std::terminate();
}).detach();
std::string s;
std::getline(std::cin, s);
flag = true;
std::cout << s << '\n';
}
答案 1 :(得分:4)
怎么样:
/* Wait 5 seconds. */
alarm(5);
/* getline */
/* Cancel alarm. */
alarm(0);
或者您可以使用setitimer
。
作为 R。 Martinho Fernandes 要求:
函数alarm
安排当前进程在其调用后5秒内接收SIGALRM。 SIGALRM
si的默认操作是异常终止进程。调用alarm(0)
会禁用计时器。