使用的是C
time_t myTime = time (NULL);
do{
if(time (NULL) - myTime > 9){
myTime = time (NULL);
printf ("%s\n", asctime (gmtime(&mytime)));
}
} while(1);
一个无穷循环,每隔10秒就会印出时间
但是没办法一执行马上就印出时间,我唯一想到的方法就是把printf写在循环前
想请问一下有没有其他写法可以在循环内先印一次,之后每隔10秒再印的
作者:
cutekid (可爱小孩子)
2018-08-01 18:45:00(now - myTime) % 10 == 0
while (1) { print(time); wait(10); }你这个循环很恐怖 会抢占 CPU 资源
多写一个 printf 并没有什么大问题,我也会这样写,倒是楼上说的浪费 CPU time 跑循环问题比较大如果觉得同样的 code 写两次很蠢,独立写成 function即可,应该会自动变成 inline function
作者: FrozenMoment 2018-08-01 19:13:00
推2楼
像上面所说用wait sleep 之类最合理。硬要这样写的话,把 myTime 的宣告改做 time_t myTime = 0; 就好了
作者:
kikiqqp (喵食罐头)
2018-08-02 01:40:00加个bool判断是不是首次进入.....
作者:
Sex5F (HTC)
2018-08-02 09:26:00这okay阿,开个thread改成sleep就好sleep起来后再确认一次时间到底到了没,这做法很标准
干嘛开 thread 还有 sleep 完干嘛再检查?
因为 sleep 会被 signal 打断所以说是标准作法,nanosleep 也是要睡醒看一下剩多久至于为什么要开 thread 我就不懂了 XD
作者:
cphe (魔鬼藏在垃圾筒里)
2018-08-03 00:55:00如果这边的time_t定义是long,你又真的想为这个case少一行print,myTime初值设为0就好另外用difftime 应该比较好一些