C++ 11 std :: chrono :: duration的示例

tsh*_*h06 2 c++ duration c++11

我编写了一个示例函数来理解std::chrono::duration最近作为C++ 11标准的一部分引入的行为.

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();
}
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

当我运行上述功能时,程序令人惊讶地在打印后等待10秒而不是在打印之后2).我期待程序在打印"等待10秒......"之后等待,然后等待然后打印"完成".但它印有"100秒是1分钟".然后等待10秒,然后输出其余部分.

Twi*_*wig 10

如果你改变它是否正常工作

cout<<"Waiting for 10 seconds...";
Run Code Online (Sandbox Code Playgroud)

cout<<"Waiting for 10 seconds..." << endl;
Run Code Online (Sandbox Code Playgroud)

可能是它没有冲洗,所以它还没有印刷那条线.

  • @ user1612089作为附注,这不仅仅是一个回复,它是一个答案,[接受](http://meta.stackexchange.com/q/5234/162011)是回答正确答案的正确方法. (3认同)