作者d630200x (DOGE)
看板C_and_CPP
标题[问题] 求比较漂亮的写法
时间Wed Aug 1 18:29:11 2018
使用的是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秒再印的
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.63.206.65
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1533119356.A.CA8.html
1F:推 cutekid: (now - myTime) % 10 == 0 08/01 18:45
2F:推 Hazukashiine: while (1) { print(time); wait(10); } 08/01 18:48
3F:→ Hazukashiine: 你这个回圈很恐怖 会抢占 CPU 资源 08/01 18:49
4F:推 Schottky: 多写一个 printf 并没有什麽大问题,我也会这样写,倒 08/01 19:00
5F:→ Schottky: 是楼上说的浪费 CPU time 跑回圈问题比较大 08/01 19:00
6F:→ Schottky: 如果觉得同样的 code 写两次很蠢,独立写成 function 08/01 19:02
7F:→ Schottky: 即可,应该会自动变成 inline function 08/01 19:02
8F:推 FrozenMoment: 推2楼 08/01 19:13
9F:→ adrianshum: 像上面所说用wait sleep 之类最合理。硬要这样写的话 08/01 20:36
10F:→ adrianshum: ,把 myTime 的宣告改做 time_t myTime = 0; 就好了 08/01 20:36
11F:→ kikiqqp: 加个bool判断是不是首次进入..... 08/02 01:40
12F:推 Sex5F: 这okay阿,开个thread改成sleep就好 08/02 09:26
13F:→ Sex5F: sleep起来後再确认一次时间到底到了没,这做法很标准 08/02 09:27
14F:→ Hazukashiine: 干嘛开 thread 还有 sleep 完干嘛再检查? 08/02 14:04
15F:→ Schottky: 因为 sleep 会被 signal 打断 08/02 17:44
16F:→ Schottky: 所以说是标准作法,nanosleep 也是要睡醒看一下剩多久 08/02 17:46
17F:→ Schottky: 至於为什麽要开 thread 我就不懂了 XD 08/02 17:47
18F:推 cphe: 如果这边的time_t定义是long,你又真的想为这个case少一行pr 08/03 00:55
19F:→ cphe: int,myTime初值设为0就好 08/03 00:55
20F:→ cphe: 另外用difftime 应该比较好一些 08/03 00:56