1. 计算时间间隔

  • std::chrono::steady_clock专门设计用来计算时间间隔
  • 应用示例: ```cpp

    include

    include

int main(int argc ,char** argv) { int TIMES = 1000000000; int value = 0;

  1. auto start = std::chrono::steady_clock::now();
  2. for (int i = 0; i < TIMES; ++i) {
  3. value = 1 - value;
  4. }
  5. auto end = std::chrono::steady_clock::now();
  6. std::cout << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << " ms." << std::endl;
  7. return 0;

}

  1. - 参考资料:
  2. - [http://www.cplusplus.com/reference/chrono/steady_clock/](http://www.cplusplus.com/reference/chrono/steady_clock/)
  3. - [http://www.cplusplus.com/reference/chrono/high_resolution_clock/](http://www.cplusplus.com/reference/chrono/high_resolution_clock/)
  4. - [http://www.cplusplus.com/reference/chrono/system_clock/](http://www.cplusplus.com/reference/chrono/system_clock/)
  5. - 关于 system_clocksteady_clockhigh_resolution_clock 的具体说明及区别: [https://stackoverflow.com/questions/13263277/difference-between-stdsystem-clock-and-stdsteady-clock](https://stackoverflow.com/questions/13263277/difference-between-stdsystem-clock-and-stdsteady-clock)
  6. <a name="FJK2H"></a>
  7. # 2. 获取系统时间戳
  8. - C++11 提供了chrono,专门用来处理时间相关的业务逻辑,它是一个处于std下的子命名空间,详细内容可以参考 [std::chrono](http://www.cplusplus.com/reference/chrono/),下面介绍两种应用场景.
  9. <a name="hjKKD"></a>
  10. ## 2.1. 获取当前时间戳
  11. ```cpp
  12. // get current local time stamp, unit is ms(milliseconds)
  13. int64_t GetCurrentLocalTimeStamp() {
  14. std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp =
  15. std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
  16. auto tmp = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch());
  17. return tmp.count();
  18. // return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
  19. }
  • system_clock是系统级时钟,能够获取当前的time_point,其now静态成员函数用来获取当前时间.
  • time_point的time_since_epoch成员方法获取1970以来的时间,然后通过time_point_cast或者duration_cast的count函数获取具体时间.

    2.2. 获取时间跨度

    1. int CountTimeConsume() {
    2. std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
    3. std::cout << "printing out 1000 stars...\n";
    4. for (int i = 0; i < 1000; ++i)
    5. std::cout << "*";
    6. std::cout << std::endl;
    7. std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
    8. std::chrono::duration<double, std::milli> time_span = t2 - t1;
    9. std::cout << "It took me " << time_span.count() << " milliseconds.";
    10. std::cout << std::endl;
    11. return 0;
    12. }

    3. C++11互斥锁使用

  • std::lock_guard 上锁解锁更高效 ```cpp // 伪代码

    include

    include

std::mutex mutex_lock; bool kSharedResource;

void Thread1() { { std::lock_guard lg(mutex_lock); kSharedResource = true; } }

void Thread2() { { std::lock_guard lg(mutex_lock); kSharedResource = false; } }

int main(int argc, char** argv) { auto thread_handle = new std::Thread(Thread1);

while(1) { Thread2(); }

thread_handle->join();

return 0 } ```