重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你是指延迟函数还是定时调用,比如到11:12:13秒执行某个函数?
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的尼玛网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
如果是延时函数用
usleep(usec); // 微妙
sleep(sec); // 秒
如果是定时执行的话,你只能开个线程或while,每隔1s判断下当前系统时间,
struct tm *ptm;
long ts;
int y,m,d,h,n,s;
ts = time(NULL);
ptm = localtime(ts);
y = ptm- tm_year+1900; //年
m = ptm- tm_mon+1; //月
d = ptm- tm_mday; //日
h = ptm- tm_hour; //时
n = ptm- tm_min; //分
s = ptm- tm_sec; //秒
照着上面的格式组成字符串进行判断,到点了就执行就可以了
实际上,windows和Linux获得时间的机制是不一样的,不是靠代码就能够完成。想在windows下实现gettimeofday,其实就是windows取时间的方式,还有Linux提供了渐进修改时间的接口adjtime(),而windows就没有。
精度达到微妙是不可能的,因为计算机本身的时间片10-15ms左右,不管是Linux和windows,因此不可能达到那个精度。
另外系统时间和RTC时间也是不同的概念,当然读RTC时间成本很高,但是准确,可以用汇编或具体的库来读,但是只是一瞬间的参考,按长远来说也是很不稳定的,做多10-15ms精度,当然,你可以自己用代码时间一个时间估计的过程,用算法来弥补,给出误差分析,但这个是数学了。
可以调用函数
settimeofday
int settimeofday(const struct timeval *tv , const struct timezone *tz);
struct timeval {
time_t tv_sec; /* seconds since Jan. 1, 1970 */
suseconds_t tv_usec; /* 微妙 */
};
也可以用system调用系统命令date
可以用usleep函数
单位是微妙
比如
usleep(1000);
这个是暂停一毫秒。
usleep(10);
暂停10微秒