[問題] 如何實作 Event 而非Polling 問

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間14年前 (2011/12/28 12:20), 編輯推噓0(0013)
留言13則, 2人參與, 最新討論串1/1
有點不太會下標題 一直存在一個盲點 假如我有一個需求是偵測 網路 Type只要有Change的話 就要通知上層跟我註冊Callback的人 但 "GetNetWorkType()"這 API 我有 但我無法 第一時間 偵測到change 就往上報 我能做的 只能類似以下寫法 while(true) { Sleep(睡一下 不狂問); auto nt = GetNetWorkType(); if(有change) Callback(nt); } 但這種寫法一定無法做到第一時間得到資訊 如果要做到第一時間 是不是需要OS 或是 什麼來幫助我呢?? 之前有經驗 win32有提供 listen一個reg key 的API 我註冊callback 假如這個key的value被改 我會收到callbck.... 這樣確實可以得到第一手消息 但是其他case 我都只能選擇 polling主動去問 請問有沒有什麼技術 可以讓我做到我想做的呢 目前是針對windows 下....linux不熟 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66

12/28 13:13, , 1F
一般常用的notification其實微軟都有做
12/28 13:13, 1F

12/28 13:14, , 2F
比較討厭的地方是較新的api幾乎都是COM...
12/28 13:14, 2F

12/28 13:16, , 3F
你要的功能可以參考 http://goo.gl/PqECu
12/28 13:16, 3F

12/28 13:16, , 4F
有點麻煩因為還有分XP和Vista/7兩種
12/28 13:16, 4F

12/28 13:16, , 5F
但是話說回來這類東西就算你用registry
12/28 13:16, 5F

12/28 13:16, , 6F
XP和Vista/7也是不一樣..
12/28 13:16, 6F

12/28 14:46, , 7F
我network只是舉個例子@@ 我想說除了用polling的方式問
12/28 14:46, 7F

12/28 14:46, , 8F
有沒有其他方式可以得到資訊, reg那個是剛好微軟會去改reg的
12/28 14:46, 8F

12/28 14:46, , 9F
話, 才有辦法接到通知@@ 但以很多case 跟reg好像也沒關係
12/28 14:46, 9F

12/28 14:47, , 10F
所以不太知道怎麼 作會比較 好
12/28 14:47, 10F

12/28 17:22, , 11F
我的意思也是,看那個事件微軟有沒有提供notification
12/28 17:22, 11F

12/28 17:22, , 12F
但是比較新的OS notification很多都是COM...很麻煩
12/28 17:22, 12F

12/28 17:32, , 13F
如果是你自己寫的driver可以寫AP去註冊event callback
12/28 17:32, 13F
文章代碼(AID): #1E-fZ-gV (C_and_CPP)
文章代碼(AID): #1E-fZ-gV (C_and_CPP)