湖南-VC(215735031) 21:58:46
GetQueuedCompletionStatus
你怎么理解這個函數(shù)的lpCompletionKey參數(shù)的
吉林-小伙 21:59:36
這個?
吉林-小伙 21:59:46
一個I/O完成了
吉林-小伙 21:59:52
這個函數(shù)就不阻塞了
湖南-VC(215735031) 22:00:09
再聚焦一下
湖南-VC(215735031) 22:00:29
我指的第三個參數(shù)
吉林-小伙 22:00:32
然后這個參數(shù)傳過來的 就是你投遞的那個請求的 對應(yīng)的那個參數(shù)
吉林-小伙 22:00:41
那個結(jié)構(gòu)的指針
武漢-Error<errorcpp@qq.com> 22:00:44
這是接口
吉林-小伙 22:00:50
我也不懂 哈哈
武漢-Error<errorcpp@qq.com> 22:01:06
為了讓你舒服點
吉林-小伙 22:01:13
CreateIoCompletionPort 這個指定的
武漢-Error<errorcpp@qq.com> 22:01:26
如果沒有這個參數(shù) 你肯定會想辦法實現(xiàn)類似的效果
湖南-VC(215735031) 22:01:54
我明白它的用途
吉林-小伙 22:01:59
我就用這個參數(shù)得到完成I/O的那個socket的
吉林-小伙 22:02:09
你說說
我學(xué)學(xué)
湖南-VC(215735031) 22:02:12
但還是覺得沒有一個形象的詞語記住它
吉林-小伙 22:02:14
我對完成端口 完全不會
湖南-VC(215735031) 22:02:28
說鍵值對,不準(zhǔn)確
南昌-貝貝(1125591) 22:02:30
lpCompletionKey : 攜帶和IO句柄相關(guān)的數(shù)據(jù)
lpOverlapped : 攜帶和當(dāng)前這次IO相關(guān)的數(shù)據(jù)
湖南-VC(215735031) 22:02:34
更像是鍵鍵
吉林-小伙 22:02:57
貝神 筆記
吉林-小伙 22:02:58
呵呵
湖南-VC(215735031) 22:03:25
key其實比較形象
湖南-VC(215735031) 22:03:28
鑰匙,
杭州 -(_少(26062281) 22:03:50
咋又玩上IOCP了
吉林-小伙 21:57:11
靠人格魅力
吉林-小伙 21:57:12
哈哈
湖南-VC(215735031) 21:57:17
算起來我比你開支還多9毛,我喝果粒橙,大瓶的
吉林-小伙 21:57:23
靠激情
吉林-小伙 21:57:50
不吹牛逼了
湖南-VC(215735031) 21:58:46
GetQueuedCompletionStatus
你怎么理解這個函數(shù)的lpCompletionKey參數(shù)的
吉林-小伙 21:59:36
這個?
吉林-小伙 21:59:46
一個I/O完成了
吉林-小伙 21:59:52
這個函數(shù)就不阻塞了
湖南-VC(215735031) 22:00:09
再聚焦一下
湖南-VC(215735031) 22:00:29
我指的第三個參數(shù)
吉林-小伙 22:00:32
然后這個參數(shù)傳過來的 就是你投遞的那個請求的 對應(yīng)的那個參數(shù)
吉林-小伙 22:00:41
那個結(jié)構(gòu)的指針
武漢-Error<errorcpp@qq.com> 22:00:44
這是接口
吉林-小伙 22:00:50
我也不懂 哈哈
武漢-Error<errorcpp@qq.com> 22:01:06
為了讓你舒服點
吉林-小伙 22:01:13
CreateIoCompletionPort 這個指定的
武漢-Error<errorcpp@qq.com> 22:01:26
如果沒有這個參數(shù) 你肯定會想辦法實現(xiàn)類似的效果
湖南-VC(215735031) 22:01:54
我明白它的用途
吉林-小伙 22:01:59
我就用這個參數(shù)得到完成I/O的那個socket的
吉林-小伙 22:02:09
你說說
我學(xué)學(xué)
湖南-VC(215735031) 22:02:12
但還是覺得沒有一個形象的詞語記住它
吉林-小伙 22:02:14
我對完成端口 完全不會
湖南-VC(215735031) 22:02:28
說鍵值對,不準(zhǔn)確
南昌-貝貝(1125591) 22:02:30
lpCompletionKey : 攜帶和IO句柄相關(guān)的數(shù)據(jù)
lpOverlapped : 攜帶和當(dāng)前這次IO相關(guān)的數(shù)據(jù)
湖南-VC(215735031) 22:02:34
更像是鍵鍵
吉林-小伙 22:02:57
貝神 筆記
吉林-小伙 22:02:58
呵呵
湖南-VC(215735031) 22:03:25
key其實比較形象
湖南-VC(215735031) 22:03:28
鑰匙,
杭州 -(_少(26062281) 22:03:50
咋又玩上IOCP了
湖南-VC(215735031) 22:03:50
關(guān)聯(lián)file handle的時候,指定一把鑰匙
武漢-Error<errorcpp@qq.com> 22:04:06
貝貝就是貝貝
湖南-VC(215735031) 22:04:10
收到通知的時候,系統(tǒng)還回這把鑰匙
武漢-Error<errorcpp@qq.com> 22:04:24
有了這個以后 就不需要自己做map了
武漢-Error<errorcpp@qq.com> 22:04:57
我覺得是這樣的 socket handle 要和一個更加抽象的handle 關(guān)聯(lián)起來
湖南-VC(215735031) 22:05:10
map 跟 keyvalue 有得一拼啊
湖南-VC(215735031) 22:05:44
如果hsocket是key, 一個更豐滿的結(jié)構(gòu)體是value
武漢-Error<errorcpp@qq.com> 22:05:57
擴展下話題吧
湖南-VC(215735031) 22:06:02
那么系統(tǒng)完成通知后,返回一個豐滿的value?
吉林-小伙 22:06:15
今天你可別發(fā)會議記錄了
吉林-小伙 22:06:16
呵呵
吉林-小伙 22:06:22
我該丟人啦
吉林-小伙 22:06:28
哈哈 不懂完成端口
武漢-Error<errorcpp@qq.com> 22:06:39
異步的socket分成兩類
一類是以 socket句柄作為key
一類是以 每次IO動作為key
武漢-Error<errorcpp@qq.com> 22:06:48
貌似我最近半年就這收獲
湖南-VC(215735031) 22:06:51
GetQueuedCompletionStatus 有 WSARecv, WSASend驅(qū)動
武漢-Error<errorcpp@qq.com> 22:07:04
貝貝剛剛一句話點通了很多
湖南-VC(215735031) 22:07:08
而WSARecv又必須傳入有效的hSocket,
武漢-Error<errorcpp@qq.com> 22:07:21
IOCP 對 兩種模型 都有key
湖南-VC(215735031) 22:07:20
而這個hSocket又是之前的keyvalue的鍵
武漢-Error<errorcpp@qq.com> 22:07:29
是滴
武漢-Error<errorcpp@qq.com> 22:08:00
聽貝一席話,勝寫十年代碼
湖南-VC(215735031) 22:08:12
說到底,都是圍繞hSocket,
武漢-Error<errorcpp@qq.com> 22:08:35
恩,但是IOCP
武漢-Error<errorcpp@qq.com> 22:08:47
還需要 對每次的投遞 標(biāo)記
武漢-Error<errorcpp@qq.com> 22:08:57
所以就有了 后面那個參數(shù)了
武漢-Error<errorcpp@qq.com> 22:09:26
看過一個網(wǎng)絡(luò)項目的代碼
武漢-Error<errorcpp@qq.com> 22:09:32
他是給每個socket句柄
武漢-Error<errorcpp@qq.com> 22:09:41
配一個inbuffer 一個outbuffer
南昌-貝貝(1125591) 22:10:08
完成端口又不是專給 socket 用的
武漢-Error<errorcpp@qq.com> 22:10:13
創(chuàng)建完成端口的時候 把這個對象的地址最為key
杭州 -(_少(26062281) 22:10:25
那還給什么用的
武漢-Error<errorcpp@qq.com> 22:10:41
所有的handle都可以好像
吉林-小伙 22:10:42
我用的時候
吉林-小伙 22:10:45
就弄一個buffer
南昌-貝貝(1125591) 22:10:51
所有IO操作都可以用
湖南-VC(215735031) 22:10:53
說到底都圍繞一個file handle
吉林-小伙 22:11:02
嗯
武漢-Error<errorcpp@qq.com> 22:11:02
還可以當(dāng)作線程池用
杭州 -(_少(26062281) 22:11:09
用 recv send 這些函數(shù) 可以嗎
南昌-貝貝(1125591) 22:11:22
recv send 是同步的
武漢-Error<errorcpp@qq.com> 22:11:49
recv是伯克利標(biāo)準(zhǔn)的
南昌-貝貝(1125591) 22:11:48
管道我也用IOCP
湖南-VC(215735031) 22:12:10
我想到一個形象點的比喻了。
武漢-Error<errorcpp@qq.com> 22:12:23
啥
杭州 -(_少(26062281) 22:12:32
不是有個函數(shù)可以設(shè)置的嗎
杭州 -(_少(26062281) 22:13:43
難怪上次有個人和我說iocp 不要拘泥于socket
杭州 -(_少(26062281) 22:14:01
學(xué)習(xí)了 感謝貝神
武漢-Error<errorcpp@qq.com> 22:14:58
LPOVERLAPPED *lpOverlapped,
武漢-Error<errorcpp@qq.com> 22:15:01
這個參數(shù)
吉林-小伙 22:15:02
在我還沒接觸IOCP的時候
這個群里
武漢-Error<errorcpp@qq.com> 22:15:16
一般咋設(shè)計的
湖南-VC(215735031) 22:15:17
系統(tǒng)接收一個外部鏈接套接字,可以比作一張紙條,上面1表示一個編號,把這張紙貼在一個瓶子上,這個瓶子就相當(dāng)于completionKey, 當(dāng)系統(tǒng)完成某個動作,相當(dāng)于把瓶子里注滿水,GetQueuedCompletionStatus 的時候是連整個瓶子扔回來的,瓶子上自然有那個sock1標(biāo)簽。
吉林-小伙 22:15:19
就說過N次IOCP不只用于網(wǎng)絡(luò)
武漢-Error<errorcpp@qq.com> 22:15:20
大伙兒
南昌-貝貝(1125591) 22:15:46
重疊結(jié)構(gòu)由微軟內(nèi)部使用,俺們農(nóng)村的一般不知道里面干啥的
吉林-小伙 22:15:49
?
湖南-VC(215735031) 22:16:34
哈哈,討論一下,就加深了印象。 下次再有什么抽象的再跟你們討論談?wù)?
湖南-VC(215735031) 22:17:19
一系列的操作都是圍繞那張紙進行的。
武漢-Error<errorcpp@qq.com> 22:17:31
本期的主題就是 《 IOCP lpCompletionKey湖南VC哥丟失的標(biāo)簽》
吉林-小伙 22:17:33
理解不上去
湖南-VC(215735031) 22:17:40
得, error,別寫我。
湖南-VC(215735031) 22:17:45
小伙 哪里不理解
武漢-Error<errorcpp@qq.com> 22:17:47
還沒完咧
吉林-小伙 22:17:59
我根本就不懂完成端口
武漢-Error<errorcpp@qq.com> 22:18:00
還沒說 怎么標(biāo)記 每次,,,
吉林-小伙 22:18:02
一點都不懂
武漢-Error<errorcpp@qq.com> 22:18:13
你剛剛標(biāo)記了 瓶子
湖南-VC(215735031) 22:18:22
hSocket 紙條
lpCompletionKey 瓶子
武漢-Error<errorcpp@qq.com> 22:18:25
現(xiàn)在要標(biāo)記每次打水的動作
湖南-VC(215735031) 22:18:37
當(dāng)紙條貼到瓶子的時候,,,
湖南-VC(215735031) 22:18:52
對的
武漢-Error<errorcpp@qq.com> 22:18:55
這個應(yīng)該是 lpOverlapped的工作了
湖南-VC(215735031) 22:19:05
我想想再怎么把WSARecv關(guān)聯(lián)進來
湖南-VC(215735031) 22:19:29
阿姨,我要一瓶水。
湖南-VC(215735031) 22:19:46
WSARecv ,向系統(tǒng)請求一瓶水
杭州 -(_少(26062281) 22:19:48
我看了一部分關(guān)于iocp的資料
武漢-Error<errorcpp@qq.com> 22:20:06
IOCP要用,,,看沒什么用的,
杭州 -(_少(26062281) 22:20:18
但是 書上沒有 vc 講的那么生動
湖南-VC(215735031) 22:20:30
你不找阿姨要水, GetQueuedCompletionStatus 怎么會事先知道你要水?還把水瓶丟回給你?
武漢-Error<errorcpp@qq.com> 22:21:01
vc至少沉淀了 6 7年了
恩,要是 post動作
武漢-Error<errorcpp@qq.com> 22:22:55
應(yīng)該是調(diào)酒師
北京—文文(15692091) 22:23:13
北京小程序員求職。。。
有沒有要招人的~
吉林-小伙 22:23:11
你們說下這個完成端口的原理唄
吉林-小伙 22:23:19
讓我系統(tǒng)學(xué)習(xí)學(xué)習(xí)
北京—文文(15692091) 22:23:26
完成端口?
湖南-VC(215735031) 22:23:23
這里阿姨的地方有個小細節(jié)
吉林-小伙 22:23:25
用過幾次 也不得要領(lǐng)
武漢-Error<errorcpp@qq.com> 22:23:29
你每次要調(diào)不同的酒水 都要下單
吉林-小伙 22:23:40
嗯
武漢-Error<errorcpp@qq.com> 22:23:49
每個客戶 有自己的杯子
湖南-VC(215735031) 22:24:00
你要,如果之前你要過一次,她沒給完,這次她就會告訴你,0,還有水你沒接完呢
吉林-小伙 22:25:33
MSDN的例子 有木有?
吉林-小伙 22:25:45
IOCP的
吉林-小伙 22:25:43
搜哪個API可以搜到
湖南-VC(215735031) 22:25:54
小伙你哪里不懂
吉林-小伙 22:26:11
我不明白為什么用完成端口 會提高效率
吉林-小伙 22:26:26
咱們從頭開始?
武漢-Error<errorcpp@qq.com> 22:26:39
OS維護線程池
湖南-VC(215735031) 22:26:41
最明顯的是 ring3 到 ring0的緩存交換
湖南-VC(215735031) 22:27:00
這里至少精簡了一些細節(jié)
武漢-Error<errorcpp@qq.com> 22:27:04
數(shù)據(jù)不一定,這個就算不iocp也有辦法優(yōu)化
北京—文文(15692091) 22:27:08
小伙 你找貝貝
北京—文文(15692091) 22:27:27
我那個時候?qū)W完成端口也看不懂
武漢-Error<errorcpp@qq.com> 22:27:26
我覺得是線程池
湖南-VC(215735031) 22:27:27
可以從頭開始, 按你提問的方式
吉林-小伙 22:27:33
好的
湖南-VC(215735031) 22:27:38
剛我是說給自己,和聽得懂的人的
吉林-小伙 22:27:55
首先 我創(chuàng)建一個完成端口
武漢-Error<errorcpp@qq.com> 22:27:58
小伙和VC的基情
湖南-VC(215735031) 22:28:46
恩,返回了一個句柄,創(chuàng)建Ok,
湖南-VC(215735031) 22:28:52
這個沒什么疑問把
吉林-小伙 22:29:12
嗯 拿socket說
湖南-VC(215735031) 22:29:42
哪一步了
湖南-VC(215735031) 22:30:08
有外部連接進來,準(zhǔn)備關(guān)聯(lián)?
吉林-小伙 22:30:19
稍等
吉林-小伙 22:30:22
我組織下語言
吉林-小伙 22:30:26
]9PGF.gif)
杭州 -(_少(26062281) 22:30:33
ACCEPTEX
吉林-小伙 22:30:36
socket我理解成一個文件吧
吉林-小伙 22:30:37
呵呵
湖南-VC(215735031) 22:30:41
可以
吉林-小伙 22:30:44
這樣好說一點
吉林-小伙 22:30:44
嗯
杭州 -(_少(26062281) 22:30:44
是不
吉林-小伙 22:31:12
創(chuàng)建完成端口返回那個句柄 就是 對這個文件進行IO的一個通道
吉林-小伙 22:31:28
比如文件是一個瓶子
吉林-小伙 22:31:39
那這個句柄就是瓶口的標(biāo)志
吉林-小伙 22:31:48
這樣理解有問題不?
湖南-VC(215735031) 22:32:07
問題是沒有,只是接下去會很復(fù)雜
杭州 -(_少(26062281) 22:32:35
關(guān)聯(lián)端口
杭州 -(_少(26062281) 22:32:43
是不
吉林-小伙 22:33:05
沒事 繼續(xù)
湖南-VC(215735031) 22:33:13
你文件是一個瓶子,那你跟創(chuàng)建完成的端口關(guān)聯(lián)的時候的關(guān)系很模糊
湖南-VC(215735031) 22:33:38
你上面的例子,瓶子不是獨立的,把完成端口當(dāng)成瓶口, 牽扯太復(fù)雜了
吉林-小伙 22:33:40
文件就是一個容器
廣州-FEEL(515873448) 22:33:47
哈哈哈哈哈哈…
(來自iPhone QQ:http://mobile.qq.com/v/)
武漢-Error<errorcpp@qq.com> 22:33:51
是句柄
吉林-小伙 22:33:52
用來存儲各樣的數(shù)據(jù)的
吉林-小伙 22:34:17
要不咱倆私聊吧
吉林-小伙 22:34:18
哈哈
湖南-VC(215735031) 22:34:16
恩,
/Tencent/QQ/PersonalData/85126585/Image/4[%7Dks5gs%25xphn3z%60dp%253%7Dkx.jpg)
這是對的
湖南-VC(215735031) 22:34:23
只是你換個比喻形式
吉林-小伙 22:34:24
怕有些人煩
杭州 -(_少(26062281) 22:34:52
我也學(xué)習(xí)下
杭州 -(_少(26062281) 22:35:00
我有些地方?jīng)]看懂
杭州 -(_少(26062281) 22:35:04
書上
吉林-小伙 22:35:05
創(chuàng)建完成后
杭州 -(_少(26062281) 22:35:12
vc 寫的很生動 哈哈
吉林-小伙 22:35:20
要用一個線程來等待客戶端的請求
武漢-Error<errorcpp@qq.com> 22:35:31
今天的mvp
杭州 -(_少(26062281) 22:35:37
這個一般算是主線程把
杭州 -(_少(26062281) 22:35:46
用來啟動 其他的線程
吉林-小伙 22:35:49
少 不要糾結(jié)那些小事
吉林-小伙 22:35:54
]9PGF.gif)
杭州 -(_少(26062281) 22:35:55
額
杭州 -(_少(26062281) 22:35:56
好
吉林-小伙 22:36:20
客戶端請求連接了 然后呢?
吉林-小伙 22:36:33
然后WSARecv投遞請求?
湖南-VC(215735031) 22:36:41
你關(guān)聯(lián)這塊還沒解釋清楚呢
湖南-VC(215735031) 22:36:47
跳過去,會越來越模糊的
吉林-小伙 22:37:01
把完成端口和文件關(guān)聯(lián)起來
吉林-小伙 22:37:07
用的不就是Createxxxxxxxxxxxx嗎?
湖南-VC(215735031) 22:37:08
就是接收連接后,準(zhǔn)備工作要做好
湖南-VC(215735031) 22:37:34
恩,你說的是“關(guān)聯(lián)”,還是真的能具體到細節(jié)呢
吉林-小伙 22:37:50
具體細節(jié)
吉林-小伙 22:38:00
私聊吧
吉林-小伙 22:38:03
這里說太煩了
湖南-VC(215735031) 22:38:05
我反問你,為什么要關(guān)聯(lián),關(guān)聯(lián)以后在哪里使用
吉林-小伙 22:38:12
OK
湖南-VC(215735031) 22:38:25
可以
武漢-Error<errorcpp@qq.com> 22:39:49
火神大大的壞
武漢-Error<errorcpp@qq.com> 22:39:53
一個去學(xué)了,,,
吉林-小伙 22:40:04

武漢-Error<errorcpp@qq.com> 22:40:36
就這么點我先發(fā)博客去算了
武漢-Error<errorcpp@qq.com> 22:40:36
就這么點我先發(fā)博客去算了
杭州 -(_少(26062281) 22:40:56
關(guān)聯(lián)以后 就為什么要WSARECV
杭州 -(_少(26062281) 22:41:09
不是有線程嗎
南昌-貝貝(1125591) 22:41:39
讀是被動的
南昌-貝貝(1125591) 22:41:50
被動操作要投遞請求
武漢-Error<errorcpp@qq.com> 22:43:13
貌似只有IOCP 和 overlaped 的 發(fā)送
武漢-Error<errorcpp@qq.com> 22:43:17
是投遞的
武漢-Error<errorcpp@qq.com> 22:43:30
其他幾個異步 發(fā)送都是同步
杭州 -(_少(26062281) 22:44:18
/Tencent/QQ/PersonalData/85126585/Image/)uua11~nnym%25~n%25)32oux6s.jpg)
杭州 -(_少(26062281) 22:44:34
/Tencent/QQ/PersonalData/85126585/Image/a%7D_pb@umtw)irpcyqxbtt]f.jpg)
杭州 -(_少(26062281) 22:44:42
書上的代碼
杭州 -(_少(26062281) 22:44:57
一個是主線程中的
北京—文文(15692091) 22:45:07
貝貝 為啥當(dāng)初我問你的時候你就只給我兩頁代碼讓我自己看呢~~
杭州 -(_少(26062281) 22:45:07
一個是線程里面的
杭州 -(_少(26062281) 22:45:21
::WSARecv(pPerHandle->s, &buf, 1, &dwTrans, &nFlags, &pPerIO->ol, NULL);
杭州 -(_少(26062281) 22:45:28
都有這個函數(shù)
南昌-貝貝(1125591) 22:45:28
完成端口嗎? re:文文
武漢-Error<errorcpp@qq.com> 22:45:30
應(yīng)為缺乏討論環(huán)境
杭州 -(_少(26062281) 22:45:37
接受有什么不同
武漢-Error<errorcpp@qq.com> 22:45:39
這也是為啥我喜歡在群里邊說
武漢-Error<errorcpp@qq.com> 22:45:48
不喜歡私聊的原因
杭州 -(_少(26062281) 22:45:58
我就卡在這個地方 其他都理解了
武漢-Error<errorcpp@qq.com> 22:46:00
群聊是發(fā)散的
杭州 -(_少(26062281) 22:46:07
求教
武漢-Error<errorcpp@qq.com> 22:46:33
我的個人理解
南昌-貝貝(1125591) 22:46:39
投遞一個異步讀,在完成時會添加完成端口隊列
武漢-Error<errorcpp@qq.com> 22:46:55
你post以后 由OS后臺去幫你 做實際的操作
武漢-Error<errorcpp@qq.com> 22:47:09
然后你通過Get××× 獲取到這個結(jié)果
武漢-Error<errorcpp@qq.com> 22:47:17
如果不用IOCP
武漢-Error<errorcpp@qq.com> 22:47:46
你就要自己維護post隊列 自己用線程池操作 自己枷鎖 然后還是類似的 自己寫一個 Get××
杭州 -(_少(26062281) 22:47:57
也就是說 主線程中的WSARecv 是投遞到隊列中的
武漢-Error<errorcpp@qq.com> 22:48:30
貝貝比較權(quán)威
南昌-貝貝(1125591) 22:49:43
所有被動操作,心須保持總是存在請求,(完成了立即投遞新請求)
杭州 -(_少(26062281) 22:49:50
/Tencent/QQ/PersonalData/85126585/Image/5~_$uthgu%7D0tuw3fz4%60n~_8.jpg)
這個句話 要記錄下來
杭州 -(_少(26062281) 22:50:58
對照代碼看
杭州 -(_少(26062281) 22:51:02
我理解下
武漢-Error<errorcpp@qq.com> 22:51:16
你們說伙神是不是大大的壞