本文共 2163 字,大约阅读时间需要 7 分钟。
runAt 在某个时刻运行定时器runAfter 过一段时间运行定时器runEvery 每隔一段时间运行定时器上面三个函数会调用到TimerQueue.addTimer()cancel 取消定时器会调用到TimerQueue.cancel()
不使用map的原因是:map,因为TimerQueue管理了很多定时器,有可能2个定时器的时间戳Timestamp是一样的,但是实际的定时器操作Timer*是不一样的。这是不可能的。map不支持key是一样的可以使用multimap,但是multimap不常用,还是算了。尽量回避不常用的容器!!使用set的原因是:typedef std::pair Entry;typedef std::set TimerList;//set只包含一个key,key的类型是pair对 是整个key,即使Timestamp相等,但是定时器的地址Timer*也是不等的,所以key也是不等的。
#include#include using namespace std;int main(void){ int a[] = { 1, 2, 3, 4, 5 }; set s(a, a+5);//key是int,set和map都会自动排序的 cout<<*s.lower_bound(2)< =2的迭代器的位置,取*,//应该返回=2 cout<<*s.upper_bound(2)< =2的迭代器的位置,取*,应该返回=3 return 0;}
返回值优化(Return Value Optimization,简称RVO)是一种编译器优化机制
eg:
struct Foo { Foo() { cout << "Foo ctor" << endl; } Foo(const Foo&) { cout << "Foo copy ctor" << endl; } void operator=(const Foo&) { cout << "Foo operator=" << endl; } ~Foo() { cout << "Foo dtor" << endl; }}; Foo make_foo() { //return Foo(); Foo f;//这里调用构造函数 return f;//若没有RVO优化,这里会调用拷贝构造函数 //若有RVO优化,则会将对象f直接返回回去,不需要再拷贝构造,相当于对象f提升了,提升成不是一个局部对象,return时它不会释放的} int main(void){ make_foo(); return 0;}
转载地址:http://amiws.baihongyu.com/