windows網路模型之重疊IO 完成例程 的使用

2022-02-02 14:58:39 字數 1164 閱讀 5153

#include #include 

#define port 5150

#define msgsize 1024

#pragma comment(lib, "ws2_32.lib")typedef

struct

per_io_operation_data, *lpper_io_operation_data;

dword winapi workerthread(lpvoid);

void

socket g_snewclientconnection;

bool g_bnewconnectionarrived =false;

intmain()

}dword winapi workerthread(lpvoid lpparam)

sleepex(

1000

, true);                  //這裡如果不sleep,根本不會進入完成例程的**,第乙個引數時間可以適當縮小

} return0;

}void

callback completionroutine(dword dwerror,

dword cbtransferred,

dword dwflags)

else

}

這個模型中有兩個函式可以交換著用,那就是wsawaitformultipleevents()和sleepex()函式,前者需要乙個事件驅動,後者則不需要。是不是聽起來後者比較厲害,當然不是,簡單肯定是拿某種效能換來的,那就是當多client同時發出請求的時候,sleepex如果等候時間設定成比較大的話,會造成client連線不上的現象。具體可以執行一下示例**體會一下。 

完成例程來實現重疊i/o比用事件通知簡單得多。在這個模型中,主線程只用不停的接受連線即可;輔助線程判斷有沒有新的客戶端連線被建立,如果有,就為那個客戶端套接字啟用乙個非同步的wsarecv操作,然後呼叫sleepex使執行緒處於一種可警告的等待狀態,以使得i/o完成後completionroutine可以被核心呼叫。如果輔助線程不呼叫sleepex,則核心在完成一次i/o操作後,無法呼叫完成例程(因為完成例程的執行應該和當初啟用wsarecv非同步操作的**在同乙個執行緒之內)。

重疊i 0非同步socket模型

因為相信,每個qq頭像亮著的背後,電腦前都坐著乙個孤獨的人。你的個性簽名不再更新,qq頭像不再亮,所以我相信你在生活中是開心的。天橋還是那座天橋,車樑還是會從下面經過,路燈還是兩排。只是我們都回不去那樣的場景了。錯過好幾次約會,上班遲到扣了好幾次工資,為得到一點成就感,現在放出來。include s...

Socket模型之重疊I O模型

socket模型之重疊i o模型 這幾天一直在看關於socket程式設計的幾種非同步程式設計,我覺得關於重疊i o模型的一些基本知識,我有必要記下來。在實際的程式設計過程中,我們需要按照下面幾步來編寫我們的socket重疊模型的程式 一 在伺服器端 1 首先初始化socket套接字。由於編寫非同步套...

套接字之重疊I O模型

剛剛把重疊i o套接字理解了一點,於是在此做個筆記,給出乙個重疊i o處理單個套接字的程式。這個程式是tcp的伺服器端程式。該程式只能接收乙個客戶端的連線,迴圈傳送資訊,以及該客戶端退出時伺服器端得到響應。套接字型檔初始化等 省略了,只包含乙個監聽部分和乙個處理i o部分的 如下 開始進行重疊i o...