[問題] 求比較漂亮的寫法

作者: 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