1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
static int gettimeofday(struct timeval *tp, void *t) { timeb tv; ftime(&tv); tp->tv_sec = tv.time; tp->tv_usec = tv.millitm*1000; return 1; }
int sem_timedwait_ms(sem_t *sem, int milliseconds) { struct timespec abstime; struct timeval now; uint64_t tv_nsec; gettimeofday(&now, NULL); tv_nsec = now.tv_usec * 1000 + (milliseconds % 1000) * 1000000; abstime.tv_sec = now.tv_sec + milliseconds / 1000; if(tv_nsec>=1000000000) { tv_nsec -= 1000000000; abstime.tv_sec += 1; } abstime.tv_nsec = tv_nsec; return sem_timedwait(sem, &abstime); }
|
近期评论