getline()
コマンドラインからc++で文字列を読み取りたい。
5
そのために私は秒のタイマーを追加したいと思います。文字列が読み取られない場合、プログラムは終了します。
これどうやってするの?
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';
}
どうですか:
/* Wait 5 seconds. */
alarm(5);
/* getline */
/* Cancel alarm. */
alarm(0);
または、を使用することもできますsetitimer
。
R.マルティニョフェルナンデスが要求したように:
この関数alarm
は、現在のプロセスが呼び出しから5秒以内にSIGALRMを受信するように調整します。SIGALRM
siがプロセスを異常終了させるためのデフォルトのアクション。呼び出すalarm(0)
とタイマーが無効になります。