看板 C_and_CPP 關於我們 聯絡資訊
使用的是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://www.ptt.cc/bbs/C_and_CPP/M.1533119356.A.CA8.html
cutekid: (now - myTime) % 10 == 0 08/01 18:45
Hazukashiine: while (1) { print(time); wait(10); } 08/01 18:48
Hazukashiine: 你這個迴圈很恐怖 會搶佔 CPU 資源 08/01 18:49
Schottky: 多寫一個 printf 並沒有什麼大問題,我也會這樣寫,倒 08/01 19:00
Schottky: 是樓上說的浪費 CPU time 跑迴圈問題比較大 08/01 19:00
Schottky: 如果覺得同樣的 code 寫兩次很蠢,獨立寫成 function 08/01 19:02
Schottky: 即可,應該會自動變成 inline function 08/01 19:02
FrozenMoment: 推2樓 08/01 19:13
adrianshum: 像上面所說用wait sleep 之類最合理。硬要這樣寫的話 08/01 20:36
adrianshum: ,把 myTime 的宣告改做 time_t myTime = 0; 就好了 08/01 20:36
kikiqqp: 加個bool判斷是不是首次進入..... 08/02 01:40
Sex5F: 這okay阿,開個thread改成sleep就好 08/02 09:26
Sex5F: sleep起來後再確認一次時間到底到了沒,這做法很標準 08/02 09:27
Hazukashiine: 幹嘛開 thread 還有 sleep 完幹嘛再檢查? 08/02 14:04
Schottky: 因為 sleep 會被 signal 打斷 08/02 17:44
Schottky: 所以說是標準作法,nanosleep 也是要睡醒看一下剩多久 08/02 17:46
Schottky: 至於為什麼要開 thread 我就不懂了 XD 08/02 17:47
cphe: 如果這邊的time_t定義是long,你又真的想為這個case少一行pr 08/03 00:55
cphe: int,myTime初值設為0就好 08/03 00:55
cphe: 另外用difftime 應該比較好一些 08/03 00:56