3

std::chrono::duration最近C++11標準の一部として導入された動作を理解するために1つのサンプル関数を作成しました。

void exampleForDuration()
{
    seconds Sec(minutes(1));

    cout<<"1 second is "<<duration_cast<nanoseconds>(seconds(1)).count()<<" nanoseconds"<<endl;
    cout<<"1 minute is "<<Sec.count()<<" seconds"<<endl;
    cout<<"1 second is "<<duration_cast<duration<int,centi>>(seconds(1)).count()<<" centiseconds"<<endl;
    cout<<"100 second is "<<duration_cast<minutes>(seconds(100)).count()<<" minute."<<endl;
    cout<<"Waiting for 10 seconds...";
    auto start=system_clock::now();
    this_thread::sleep_for(seconds(10));
    cout<<"Done."<<endl;
    auto end=system_clock::now();
    auto waitedFor=end-start;
    cout<<"Waited for "<<duration_cast<seconds>(waitedFor).count()<<" seconds"<<endl;
    printCurrentDateTime();
}

出力:

1 second is 1000000000 nanoseconds
1 minute is 60 seconds
1 second is 100 centiseconds
100 second is 1 minute.                -------> 1)
Waiting for 10 seconds...Done.         -------> 2)
Waited for 10 seconds

上記の関数を実行すると、プログラムは驚くべきことに、2)を印刷した後ではなく、1)を印刷した後10秒間待機しました。「Waitingfor10seconds ...」を印刷した後、プログラムが待機してから「Done」を印刷することを期待していました。しかし、「100秒は1分です」と印刷されました。次に、10秒間待機してから、残りの出力を待ちました。

4

1 に答える 1

10

変更しても正しく動作しますか

cout<<"Waiting for 10 seconds...";

cout<<"Waiting for 10 seconds..." << endl;

フラッシュされていない可能性があるため、その行はまだ印刷されていません。

于 2012-08-26T10:31:18.347 に答える