作者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/m.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