[问题] 求比较漂亮的写法

楼主: d630200x (DOGE)   2018-08-01 18:29:11
使用的是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
作者: Hazukashiine (私は幸せです)   2018-08-01 18:48:00
while (1) { print(time); wait(10); }你这个循环很恐怖 会抢占 CPU 资源
作者: Schottky (顺风相送)   2018-08-01 19:00:00
多写一个 printf 并没有什么大问题,我也会这样写,倒是楼上说的浪费 CPU time 跑循环问题比较大如果觉得同样的 code 写两次很蠢,独立写成 function即可,应该会自动变成 inline function
作者: FrozenMoment   2018-08-01 19:13:00
推2楼
作者: adrianshum (Alien)   2018-08-01 20:36:00
像上面所说用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起来后再确认一次时间到底到了没,这做法很标准
作者: Hazukashiine (私は幸せです)   2018-08-02 14:04:00
干嘛开 thread 还有 sleep 完干嘛再检查?
作者: Schottky (顺风相送)   2018-08-02 17:44:00
因为 sleep 会被 signal 打断所以说是标准作法,nanosleep 也是要睡醒看一下剩多久至于为什么要开 thread 我就不懂了 XD
作者: cphe (魔鬼藏在垃圾筒里)   2018-08-03 00:55:00
如果这边的time_t定义是long,你又真的想为这个case少一行print,myTime初值设为0就好另外用difftime 应该比较好一些

Links booklink

Contact Us: admin [ a t ] ucptt.com