7

getline()コマンドラインからc++で文字列を読み取りたい。

5そのために私は秒のタイマーを追加したいと思います。文字列が読み取られない場合、プログラムは終了します。

これどうやってするの?

4

2 に答える 2

9

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';
}
于 2013-03-20T13:22:45.680 に答える
4

どうですか:

/* Wait 5 seconds. */
alarm(5);

/* getline */

/* Cancel alarm. */
alarm(0);

または、を使用することもできますsetitimer


R.マルティニョフェルナンデスが要求したように:

この関数alarmは、現在のプロセスが呼び出しから5秒以内にSIGALRMを受信するように調整します。SIGALRMsiがプロセスを異常終了させるためのデフォルトのアクション。呼び出すalarm(0)とタイマーが無効になります。

于 2013-03-20T12:56:25.420 に答える