在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
经过研究代码,觉得有几个函数必须要清楚原理。才能理解代码,清楚流程。
异步模式:类似form.show(); 阻塞模式:类似form.showModal();
WSAAccept; 当客户端有连接请求的时候,WSAAccept函数会新创建一个套接字cSocket。 其他的参数可以查看MSDN,和google。 需要说明的一点是这个函数不是异步的,是阻塞模式。
WSARecv; 收取socket的数据 这个函数是异步模式,执行后马上返回。 数据接收到后,GetQueuedCompletionStatus,会返回
GetQueuedCompletionStatus: 实现从指定的IOCP请求队列中获取请求。 当队列为空时,对此函数的调用将被阻塞。 当队列不为空时,被阻塞的线程将以后进先出(LIFO)顺序被请求出去.
PostQueuedCompletionStatus: CSDN上面的解释 Posts an I/O completion packet to an I/O completion port. 向IO完成端口Post一个I/O完成数据包。 //也有一个blogs上面是这样解释 >>>PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”. 出自:http://hi.baidu.com/drunkdream/item/b4b4b649dd6c9b0fc01613ac >>>>我做个一个这样的测试在Accept连接后,执行PostQueuedCompletionStatus, PostQueuedCompletionStatus(lvIOPort, 0, 0, nil); 开启有7个工作线程.只有一个线程的GetQueuedCompletionStatus,有返回值。 >>>>>> 我的理解是: 想IO端口中发送一个数据包到队列中.会触发一个GetQueuedCompletionStatus有返回值,并不会所有的线程中的GetQueuedCompletionStatus有返回值。
下一节,研究,这几个函数的实际使用 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论