(原创)sem_wait实现毫秒级延时

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);
}
多谢打赏
-------------本文结束感谢您的阅读-------------
0%