ftime() 函数,这个函数是取系统的时间,精确到毫秒级别,它在windows 和linux 下都可用。所以我暂时是比较喜欢它的。
这个函数返回一个结构体,结构体中两个成员,其中time 成员,与函数 time(NULL) 返回的是等同的,用它可以配合localtime mktime ctime 等时间函数作相应的时间操作。
#include <stdio.h>
#include <sys/timeb.h> void main_tick(time_t cur_sec)
{ } int main()
{
int msec_per_tick = ; // 每一个TICK 的毫秒值 struct timeb s_tp_cur = {, };
struct timeb s_tp_fin = {, };
int next_millitm = ; // 当前时间经过一个tick 之后的毫秒值,在未进位到秒之前
int surplus_msec = ; // 剩余tick 毫秒值: > 0 代表需要休眠
ftime(&s_tp_cur);
s_tp_fin = s_tp_cur; int count = ;
while (count-- >= )
{
//< 主tick 开始
main_tick(s_tp_cur.time);
//< 主tick 结束 ftime(&s_tp_cur); surplus_msec = (int)(s_tp_fin.time - s_tp_cur.time) *
+ (s_tp_fin.millitm - s_tp_cur.millitm);
#if defined OS_WINDOWS
printf("beg: %lld.%d, end: %lld.%d, surplus_msec = %d\n",
s_tp_cur.time, s_tp_cur.millitm,
s_tp_fin.time, s_tp_fin.millitm,
surplus_msec);
#elif defined OS_LINUX
printf("beg: %ld.%d, end: %ld.%d, surplus_msec = %d\n",
s_tp_cur.time, s_tp_cur.millitm,
s_tp_fin.time, s_tp_fin.millitm,
surplus_msec);
#endif if (surplus_msec > )
{
printf("Sleep(%d)\n", surplus_msec);
next_millitm = s_tp_cur.millitm + msec_per_tick + surplus_msec;
#if defined OS_WINDOWS
Sleep(surplus_msec);
#elif defined OS_LINUX
usleep(surplus_msec * );
#endif
}
else
{
next_millitm = s_tp_cur.millitm + msec_per_tick;
} // 计算tick 时间到的end 值
s_tp_fin.time = s_tp_cur.time + next_millitm / ;
s_tp_fin.millitm = next_millitm % ;
}; return ;
}