[問題] 釋放 CPU 給其他程式

看板C_and_CPP (C/C++)作者 (sjgau)時間11年前 (2015/05/10 18:12), 編輯推噓2(2020)
留言22則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows 7 底下的 Dev-C++ 問題(Question): 如標題的需求,需要呼叫哪個函數? 預期的正確結果(Expected Output): 在 delay 3000ms 的時候,能夠把 CPU time 釋放給別個程式使用 程式碼(Code):(請善用置底文網頁, 記得排版) time1(&t1);// get ms of now t2= t1; while ((t2-t1) < 3000) { time1(&t1); } 補充說明(Supplement): time1(&t1); 是自己寫的副程式 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.25 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431252721.A.085.html

05/10 18:44, , 1F
直接 sleep
05/10 18:44, 1F

05/10 19:35, , 2F
Sleep 似乎在 windows.h?
05/10 19:35, 2F

05/10 19:55, , 3F
同意一樓,sleep應該本來就會釋出CPU
05/10 19:55, 3F

05/10 22:52, , 4F
標準的做法是sleep(1) 替代做法是yield()
05/10 22:52, 4F

05/10 23:51, , 5F
yield被拔掉很久了 但是他還是以macro存在於windows.h
05/10 23:51, 5F

05/10 23:52, , 6F
佔掉一個不算稀有的動詞超討厭...
05/10 23:52, 6F

05/11 01:08, , 7F
yield 在越來越多語言是 keyword 呢, 別嫌啦
05/11 01:08, 7F

05/11 01:10, , 8F
keyword有用途,直接#define掉是找人麻煩啊
05/11 01:10, 8F

05/11 01:11, , 9F
第一次把函數取成Yield的時候debug找了超久
05/11 01:11, 9F

05/11 17:13, , 10F
Windows取代掉的是Yield() 不過我說的是
05/11 17:13, 10F

05/11 17:13, , 11F
std::this_thread::yield()
05/11 17:13, 11F

05/11 17:14, , 12F
(C++11以後才有) 這東西是明確的取代掉sleep(1)
05/11 17:14, 12F

05/11 17:14, , 13F
不然sleep(1)實在是太過於意味不明。
05/11 17:14, 13F

05/11 17:15, , 14F
另外說到#define,win32 API幾百年前的古董了 又是C
05/11 17:15, 14F

05/11 17:15, , 15F
所以別嫌啦... XDDDD 用古董就要有這種覺悟啊 orz
05/11 17:15, 15F

05/11 17:16, , 16F
不過很有趣的是,C++11只有提供本thread的yield
05/11 17:16, 16F

05/11 17:16, , 17F
似乎還是沒有定義隨手拿一個thread叫他yield的方法
05/11 17:16, 17F

05/11 17:25, , 18F
也就是說「只能自己thread去yield 不能在別的thread
05/11 17:25, 18F

05/11 17:25, , 19F
要求別人yield」(也算合理啦)
05/11 17:25, 19F

05/11 23:43, , 20F
這很合理吧, 叫一個 thread 突然暫停也太奇怪了
05/11 23:43, 20F

05/12 18:23, , 21F
誒,我才發現我把標準作法替代作法寫反了...
05/12 18:23, 21F

05/12 18:24, , 22F
標準做法是std::this_thread::yield(),替代是sleep(1)
05/12 18:24, 22F
文章代碼(AID): #1LJoxn25 (C_and_CPP)
文章代碼(AID): #1LJoxn25 (C_and_CPP)