cartographer_common_time

class Time 时间类型

作用:实现时间相关变量转换,本类中用到C++ 库chrono,参考小贴士

主要函数:

double ToSeconds(Duration duration); 把duration(不管什么单位)转换为second

Time FromUniversal(int64 ticks); 把计数器时间(如 781289445)转换为 Time值(如 3495.345s)。

int64 ToUniversal(Time time); 与FromUniversal 相反。

carto 代码引用说明:

**为信号提供时间戳变量,统计程序运行时间,频率计算等 **


小贴士

chrono是一个time library, 源于boost,现在已经是C++标准。类中主要用到std::chrono::duration和std::chrono::time_point 两个函数。参考:https://en.cppreference.com/w/cpp/chrono/

[std::chrono::duration]表示时间段,即持续时间的多

[std::chrono::time_poiny]表示时刻,即某个时间

chrono::duration:

#include <iostream>
#include <chrono>
constexpr auto year = 31556952ll; // seconds in average Gregorian yea
int main()
{
	using shakes = std::chrono::duration<int, std::ratio<1, 1000>>;
    // 把1s时间进行分隔为更小单位,表示duration的分辨率。此处为1s/1000 = 1m				    	std::chrono::seconds sec(1);
	std::cout << "1 second is:\n"
    // integer scale conversion with no precision loss: no cas
     std::cout << shakes(sec).count() << " shakes\n";
}
// 输出为
1 second is
1000 shakes.

几个预定:
typedef duration<long long, nano> nanoseconds; *// 纳秒* 
typedef duration<long long, micro> microseconds; *// 微秒*
typedef duration<long long, milli> milliseconds; *// 毫秒*
typedef duration<long long> seconds; *// 秒*
typedef duration<int, ratio<60> > minutes; *// 分钟*
typedef duration<int, ratio<3600> > hours; *// 小时*

duration_cast():

函数duration_cast()提供了在不同的时间单位之间进行转换的功能。

#include <iostream> 
#include <chrono> 

int main() 
{ 
   std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::minutes(3)); 
   std::cout << "3 minutes equals to " << ms.count() << " milliseconds\n"; 
   std::cin.get(); 
} 

chrono::time_point:

#include <iostream> 
#include <chrono> 

int main() 
{ 
   std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>      (std::chrono::minutes(3)); 
   std::cout << "3 minutes equals to " << ms.count() << " milliseconds\n"; 
   std::cin.get(); 
} 
posted @ 2020-03-07 17:52  heimazaifei  阅读(420)  评论(0编辑  收藏  举报