怎样在 毫秒 的量级上修改系统的时间?

qdzhulf 2004-03-15 05:40:14
请问,怎样在 毫秒 的量级上修改系统的时间?即精确到毫秒.
多谢!
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxywh 2004-03-16
  • 打赏
  • 举报
回复
例子:
unsigned char SetSysTime(struct NetData *net_data)
{
unsigned char h_year,l_year,month,day,hour,minute,second;
struct timeval tv;
struct timezone tz;
struct tm *p;
time_t timep,timeq;
int ret;

ret = IsTime(net_data->Data);
if (ret == FALSE)
{
printf("The net time data error.\n");
return -1;
}

memcpy(&h_year,net_data->Data,1);
memcpy(&l_year,(net_data->Data+1),1);
memcpy(&month,(net_data->Data+2),1);
memcpy(&day,(net_data->Data+3),1);
memcpy(&hour,(net_data->Data+4),1);
memcpy(&minute,(net_data->Data+5),1);
memcpy(&second,(net_data->Data+6),1);

ret = gettimeofday(&tv,&tz);
if (ret == -1)
{
printf("Gettimeofday error:%s\n",strerror(errno));
return 0;
}

ret = time(&timep);
if (ret == (time_t)-1)
{
printf("Time error:%s\n",strerror(errno));
return 0;
}

/*get local current time and date*/
p = localtime(&timep);

p = (struct tm *)alloca(sizeof(struct tm));
p->tm_year = (h_year*256 + l_year) - 1900;
p->tm_mon = month - 1;
p->tm_mday = day;
p->tm_hour = hour;
p->tm_min = minute;
p->tm_sec = second;

timeq = mktime(p);

tv.tv_sec = (long)timeq;

ret = settimeofday(&tv,&tz);
if (ret == -1)
{
printf("Settimeofday error:%s\n",strerror(errno));
return 0;
}

return 1;
}
注:该函数只精确到秒,只要略作修改,是可以精确到毫秒的。
timeval结构定义:
struct timeval
{
long tv_sec; //秒
long tv_usec; //微秒
};
blh 2004-03-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#include <sys/time.h>

int set_date(struct tm *p_tm, unsigned long ms)
{
time_t when;
struct timeval tv;

when = mktime(p_tm);
if (when == -1)
return -1;
tv.tv_sec = when;
tv.tv_usec = ms;
return settimeofday(&tv, (struct timezone *)0);
}

int main()
{
struct tm tm;
// 1976年10月26日 11:15:0.10
memset(&tm, 0, sizeof(tm));
tm.tm_sec = 0;
tm.tm_min = 14;
tm.tm_hour = 14;
tm.tm_mday = 15;
tm.tm_mon = 6;
tm.tm_year = 2003 - 1900;
if (set_date(&tm, 10) == -1)
perror("set_date");
return 0;
}
blh 2004-03-16
  • 打赏
  • 举报
回复
不好意思看错问题了,:P
「已注销」 2004-03-15
  • 打赏
  • 举报
回复
有没有直接的系统调用可以这样更改时间啊?
jack_wq 2004-03-15
  • 打赏
  • 举报
回复
使用gettimeofday()可以直接实现!
blh 2004-03-15
  • 打赏
  • 举报
回复
#include <sys/time.h>
#include <errno.h>

// 最小精度10ms
void ms_sleep(unsigned long ms)
{
struct timeval tv;
tv.sec = ms / 1000;
tv.usec = (ms % 1000) * 1000;
while ((-1 == select(0, 0, 0, 0, &tv)) && (EINTR == errno);
}

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧