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

看板C_and_CPP (C/C++)作者 (DOGE)時間7年前 (2018/08/01 18:29), 編輯推噓6(6014)
留言20則, 8人參與, 7年前最新討論串1/1
使用的是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

08/01 18:45, 7年前 , 1F
(now - myTime) % 10 == 0
08/01 18:45, 1F

08/01 18:48, 7年前 , 2F
while (1) { print(time); wait(10); }
08/01 18:48, 2F

08/01 18:49, 7年前 , 3F
你這個迴圈很恐怖 會搶佔 CPU 資源
08/01 18:49, 3F

08/01 19:00, 7年前 , 4F
多寫一個 printf 並沒有什麼大問題,我也會這樣寫,倒
08/01 19:00, 4F

08/01 19:00, 7年前 , 5F
是樓上說的浪費 CPU time 跑迴圈問題比較大
08/01 19:00, 5F

08/01 19:02, 7年前 , 6F
如果覺得同樣的 code 寫兩次很蠢,獨立寫成 function
08/01 19:02, 6F

08/01 19:02, 7年前 , 7F
即可,應該會自動變成 inline function
08/01 19:02, 7F

08/01 19:13, 7年前 , 8F
推2樓
08/01 19:13, 8F

08/01 20:36, 7年前 , 9F
像上面所說用wait sleep 之類最合理。硬要這樣寫的話
08/01 20:36, 9F

08/01 20:36, 7年前 , 10F
,把 myTime 的宣告改做 time_t myTime = 0; 就好了
08/01 20:36, 10F

08/02 01:40, 7年前 , 11F
加個bool判斷是不是首次進入.....
08/02 01:40, 11F

08/02 09:26, 7年前 , 12F
這okay阿,開個thread改成sleep就好
08/02 09:26, 12F

08/02 09:27, 7年前 , 13F
sleep起來後再確認一次時間到底到了沒,這做法很標準
08/02 09:27, 13F

08/02 14:04, 7年前 , 14F
幹嘛開 thread 還有 sleep 完幹嘛再檢查?
08/02 14:04, 14F

08/02 17:44, 7年前 , 15F
因為 sleep 會被 signal 打斷
08/02 17:44, 15F

08/02 17:46, 7年前 , 16F
所以說是標準作法,nanosleep 也是要睡醒看一下剩多久
08/02 17:46, 16F

08/02 17:47, 7年前 , 17F
至於為什麼要開 thread 我就不懂了 XD
08/02 17:47, 17F

08/03 00:55, 7年前 , 18F
如果這邊的time_t定義是long,你又真的想為這個case少一行pr
08/03 00:55, 18F

08/03 00:55, 7年前 , 19F
int,myTime初值設為0就好
08/03 00:55, 19F

08/03 00:56, 7年前 , 20F
另外用difftime 應該比較好一些
08/03 00:56, 20F
文章代碼(AID): #1ROOjyoe (C_and_CPP)
文章代碼(AID): #1ROOjyoe (C_and_CPP)