2018-04-21 21:24:46 +08:00
|
|
|
|
#include "..\e2dbase.h"
|
2018-04-24 20:22:41 +08:00
|
|
|
|
#include <thread>
|
|
|
|
|
|
#include <chrono>
|
|
|
|
|
|
using namespace std::chrono;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7>ʼʱ<CABC><CAB1>
|
|
|
|
|
|
static steady_clock::time_point s_tStart;
|
|
|
|
|
|
// <20><>ǰʱ<C7B0><CAB1>
|
|
|
|
|
|
static steady_clock::time_point s_tNow;
|
|
|
|
|
|
// <20><>һ֡ˢ<D6A1><CBA2>ʱ<EFBFBD><CAB1>
|
2018-05-31 20:28:50 +08:00
|
|
|
|
static steady_clock::time_point s_tLast;
|
|
|
|
|
|
// <20>̶<EFBFBD><CCB6><EFBFBD>ˢ<EFBFBD><CBA2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
static steady_clock::time_point s_tFixed;
|
2018-04-24 20:22:41 +08:00
|
|
|
|
// ÿһ֡<D2BB><D6A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
static milliseconds s_tExceptedInvertal;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
2018-02-27 21:07:43 +08:00
|
|
|
|
double e2d::Time::getTotalTime()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
return duration_cast<microseconds>(s_tNow - s_tStart).count() / 1000.0 / 1000.0;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-04-24 13:28:21 +08:00
|
|
|
|
unsigned int e2d::Time::getTotalTimeMilliseconds()
|
|
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
return static_cast<unsigned int>(duration_cast<milliseconds>(s_tNow - s_tStart).count());
|
2018-04-24 13:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double e2d::Time::getDeltaTime()
|
|
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
return duration_cast<microseconds>(s_tNow - s_tLast).count() / 1000.0 / 1000.0;
|
2018-04-24 13:28:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int e2d::Time::getDeltaTimeMilliseconds()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
return static_cast<unsigned int>(duration_cast<milliseconds>(s_tNow - s_tLast).count());
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
bool e2d::Time::__init()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
s_tStart = s_tFixed = s_tLast = s_tNow = steady_clock::now();
|
2018-04-17 11:41:33 +08:00
|
|
|
|
s_tExceptedInvertal = milliseconds(15);
|
2018-02-01 22:07:44 +08:00
|
|
|
|
return true;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
bool e2d::Time::__isReady()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
return s_tExceptedInvertal < duration_cast<milliseconds>(s_tNow - s_tFixed);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Time::__updateNow()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// ˢ<><CBA2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
s_tNow = steady_clock::now();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Time::__updateLast()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
s_tFixed += s_tExceptedInvertal;
|
2018-02-04 21:24:27 +08:00
|
|
|
|
|
2018-05-31 20:28:50 +08:00
|
|
|
|
s_tLast = s_tNow;
|
2018-02-04 21:24:27 +08:00
|
|
|
|
s_tNow = steady_clock::now();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-05-10 18:18:02 +08:00
|
|
|
|
void e2d::Time::__reset()
|
|
|
|
|
|
{
|
2018-05-31 20:28:50 +08:00
|
|
|
|
s_tLast = s_tFixed = s_tNow = steady_clock::now();
|
2018-05-10 18:18:02 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Time::__sleep()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
2018-05-31 20:28:50 +08:00
|
|
|
|
int nWaitMS = 16 - static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tFixed).count());
|
2018-02-04 21:24:27 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
if (nWaitMS > 1)
|
|
|
|
|
|
{
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3><CCA3>ͷ<EFBFBD> CPU ռ<><D5BC>
|
|
|
|
|
|
std::this_thread::sleep_for(milliseconds(nWaitMS));
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
2018-04-01 23:08:11 +08:00
|
|
|
|
}
|