1. 计算时间间隔
int main(int argc ,char** argv) { int TIMES = 1000000000; int value = 0;
auto start = std::chrono::steady_clock::now();
for (int i = 0; i < TIMES; ++i) {
value = 1 - value;
}
auto end = std::chrono::steady_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << " ms." << std::endl;
return 0;
}
- 参考资料:
- [http://www.cplusplus.com/reference/chrono/steady_clock/](http://www.cplusplus.com/reference/chrono/steady_clock/)
- [http://www.cplusplus.com/reference/chrono/high_resolution_clock/](http://www.cplusplus.com/reference/chrono/high_resolution_clock/)
- [http://www.cplusplus.com/reference/chrono/system_clock/](http://www.cplusplus.com/reference/chrono/system_clock/)
- 关于 system_clock、steady_clock、high_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)
<a name="FJK2H"></a>
# 2. 获取系统时间戳
- C++11 提供了chrono,专门用来处理时间相关的业务逻辑,它是一个处于std下的子命名空间,详细内容可以参考 [std::chrono](http://www.cplusplus.com/reference/chrono/),下面介绍两种应用场景.
<a name="hjKKD"></a>
## 2.1. 获取当前时间戳
```cpp
// get current local time stamp, unit is ms(milliseconds)
int64_t GetCurrentLocalTimeStamp() {
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp =
std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
auto tmp = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch());
return tmp.count();
// return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
}
- system_clock是系统级时钟,能够获取当前的time_point,其now静态成员函数用来获取当前时间.
time_point的time_since_epoch成员方法获取1970以来的时间,然后通过time_point_cast或者duration_cast的count函数获取具体时间.
2.2. 获取时间跨度
int CountTimeConsume() {
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
std::cout << "printing out 1000 stars...\n";
for (int i = 0; i < 1000; ++i)
std::cout << "*";
std::cout << std::endl;
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> time_span = t2 - t1;
std::cout << "It took me " << time_span.count() << " milliseconds.";
std::cout << std::endl;
return 0;
}
3. C++11互斥锁使用
std::lock_guard 上锁解锁更高效 ```cpp // 伪代码
include
include
std::mutex mutex_lock; bool kSharedResource;
void Thread1() {
{
std::lock_guard
void Thread2() {
{
std::lock_guard
int main(int argc, char** argv) { auto thread_handle = new std::Thread(Thread1);
while(1) { Thread2(); }
thread_handle->join();
return 0 } ```