[問題] VC++ broadcast系統更變很慢的問題

看板C_and_CPP (C/C++)作者 (再努力一點)時間14年前 (2012/04/09 01:37), 編輯推噓3(306)
留言9則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ MFC 問題(Question): 改變系統設定→廣播制系統使設定生效。 廣播的指令下下去後會停住三秒左右才完成動作,但一樣的動作, 在寫程式的初期並沒有發生會停住好幾秒這種狀況, 將編譯好的程式拿到其它電腦也不會這樣, 想釐清問題,想知道是電腦其他設定影響還是程式有問題, 請問有什麼其他可能的因素導致這種情況的產生呢? 餵入的資料(Input): 我在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags裡 加了個一筆資料,然後下 ::SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, NULL); 程式會在執行這行時停約三秒的時間。 預期的正確結果(Expected Output): 應該幾乎感覺不到等待時間。 錯誤結果(Wrong Output): 須等待約約三秒。 這情況只在目前撰寫程式的電腦發生。 程式碼(Code):(請善用置底文網頁, 記得排版) ::SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, NULL); 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.193.25

04/09 01:45, , 1F
PostMessage() ?
04/09 01:45, 1F
確實使用PostMessage()可以解決程式執行中突然停住的問題, 網路上有查到說PostMessage()會有不同步的問題(下完指令就跑,不管系統執行完沒); 而SendMessage()會有堵塞的問題, 也就是說,其實兩個function都可以用而且做用的時間應該是一樣的, 只是SendMessage()送出去的要求會在被執行後才繼續後面的動作, 所以我主要想知道的是 是什麼造成這種堵塞問題? ※ 編輯: prjryu 來自: 111.251.193.25 (04/09 01:59)

04/09 02:15, , 2F
你想了解的是, SendMessage/PostMessage 到底差在哪嗎?
04/09 02:15, 2F
不是,是想知道造成堵塞的主因,想試試有沒有辦法將這種情況排除。

04/09 02:22, , 3F
把 UsbFlags 改回原本能否恢復正常,這你總該自己先驗證吧
04/09 02:22, 3F
試過了,不會。 ※ 編輯: prjryu 來自: 111.251.193.25 (04/09 02:39)

04/09 02:46, , 4F
這樣很難追了,不過 MSDN 都叫你要用 SendMessageTimeout
04/09 02:46, 4F

04/09 02:46, , 5F
可見微軟也沒期待過用 SendMessage 絕對不會碰到你的狀況
04/09 02:46, 5F

04/09 02:49, , 6F
我也是覺得很奇怪,這問題也是最近才突然發生的
04/09 02:49, 6F

04/09 02:51, , 7F
我對電腦完整掃毒後用CCleaner清除所有能清的垃圾
04/09 02:51, 7F

04/09 02:52, , 8F
結果都一樣,所以才想說上來問問看有沒有人解過類似的問題
04/09 02:52, 8F

04/09 09:19, , 9F
或許是某個硬體造成的?
04/09 09:19, 9F
文章代碼(AID): #1FWSp1bc (C_and_CPP)
文章代碼(AID): #1FWSp1bc (C_and_CPP)