Delphi-IOCP学习笔记<二>====IOCP基本函数介绍和理解

简介: 经过研究代码,觉得有几个函数必须要清楚原理。才能理解代码,清楚流程。   异步模式:类似form.show(); 阻塞模式:类似form.showModal();   WSAAccept; 当客户端有连接请求的时候,WSAAccept函数会新创建一个套接字cSocket。

经过研究代码,觉得有几个函数必须要清楚原理。才能理解代码,清楚流程。

 

异步模式:类似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有返回值。

 

下一节,研究,这几个函数的实际使用

目录
相关文章
|
8月前
iocp基础
iocp基础
52 0
IOCP基本概念
IOCP基本概念
115 0
|
Java Windows 容器
IOCP详解
IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。
245 0
IOCP详解
|
前端开发 算法 C++
IOCP编程小结(中)
上一篇主要谈了一些基本理念,本篇将谈谈我个人总结的一些IOCP编程技巧。   网络游戏前端服务器的需求和设计   首先介绍一下这个服务器的技术背景。在分布式网络游戏服务器中,前端连接服务器是一种很常见的设计。
1080 0