add skynet_now() for 64bit time

This commit is contained in:
Cloud Wu
2015-11-16 19:48:38 +08:00
parent 87bc0815f6
commit 2252409eaa
7 changed files with 32 additions and 36 deletions

View File

@@ -45,10 +45,9 @@ struct timer {
struct link_list t[4][TIME_LEVEL];
struct spinlock lock;
uint32_t time;
uint32_t current;
uint32_t starttime;
uint64_t current;
uint64_t current_point;
uint64_t origin_point;
};
static struct timer * TI = NULL;
@@ -277,13 +276,7 @@ skynet_updatetime(void) {
} else if (cp != TI->current_point) {
uint32_t diff = (uint32_t)(cp - TI->current_point);
TI->current_point = cp;
uint32_t oc = TI->current;
TI->current += diff;
if (TI->current < oc) {
// when cs > 0xffffffff(about 497 days), time rewind
TI->starttime += 0xffffffff / 100;
}
int i;
for (i=0;i<diff;i++) {
timer_update(TI);
@@ -292,21 +285,21 @@ skynet_updatetime(void) {
}
uint32_t
skynet_gettime_fixsec(void) {
skynet_starttime(void) {
return TI->starttime;
}
uint32_t
skynet_gettime(void) {
uint64_t
skynet_now(void) {
return TI->current;
}
void
skynet_timer_init(void) {
TI = timer_create_timer();
systime(&TI->starttime, &TI->current);
uint64_t point = gettime();
TI->current_point = point;
TI->origin_point = point;
uint32_t current = 0;
systime(&TI->starttime, &current);
TI->current = current;
TI->current_point = gettime();
}