概述
Delphi 完成端口相关函数
变量
FCompletionPort : THandle; //完成端口的相关信息
const
GOWORK = $FFFFEEEE;///开始工作
WORKBEAT = $FFFFEEDD;///线程心跳
GOSEND = $FFFFEECC;///发送数据
POOLPAUSE = $FFFFCCCC;///暂停
SHUTDOWN_FLAG = $FFFFFFFF;///线程关闭
HEARTBEAT_FLAG = $FFFFFFEE;///处理线程池的心跳维持
1
2
3
4
5
6
7
8
1、CreateIOCompletionPort 创建完成端口
FCompletionPort := CreateIOCompletionPort(INVALID_HANDLE_VALUE, 0, 0, 0);
参数:
__in HANDLE FileHandle,
__in_opt HANDLE ExistingCompletionPort,
__in ULONG_PTR CompletionKey,
__in DWORD NumberOfConcurrentThreads
返回值:
返回一个IOCP的句柄。若为NULL则创建失败,不为NULL则创建成功。
2、PostQueuedCompletionStatus 投递工作状态
nRet := PostQueuedCompletionStatus(FCompletionPort, 0, 0,Pointer(WORKBEAT));
BOOL PostQueuedCompletionStatus(
HANDLE CompletlonPort,
DW0RD dwNumberOfBytesTrlansferred,
DWORD dwCompletlonKey,
LPOVERLAPPED lpoverlapped,
);
CompletionPort:指定想向其发送一个完成数据包的完成端口对象。
dwNumberOfBytesTrlansferred:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
dwCompletlonKey:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
lpoverlapped:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
3、 GetQueuedCompletionStatus 获取完成端口上的当前工作状态, 比如此时端口上完成的是什么操作,数据是什么等 ;有可能获取不成功根据返回值确定。
bRet := GetQueuedCompletionStatus(FCompletionPort, dwBytes,
DWORD(PHandleKey), POverlapped(PHandleData), INFINITE);
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort,
LPDWORD lpNumberOfBytes,
PULONG_PTR lpCompletionKey,
LPOVERLAPPED *lpOverlapped,
DWORD dwMilliseconds);
调用参数:
CompletionPort:指定的IOCP,该值由CreateIoCompletionPort函数创建。
lpnumberofbytes:一次完成后的I/O操作所传送数据的字节数。
lpcompletionkey:当文件I/O操作完成后,用于存放与之关联的CK。
lpoverlapped:为调用IOCP机制所引用的OVERLAPPED结构。
dwmilliseconds:用于指定调用者等待CP的时间。
返回值:
调用成功,则返回非零数值,相关数据存于lpNumberOfBytes、lpCompletionKey、lpoverlapped变量中。失败则返回零值。
4、CloseHandle 关闭完成端口
CloseHandle( FCompletionPort);
完成端口,使用其的主要目的是提高IO的吞吐量;
其实可以把完成端口看成系统维护的一个队列,操作系统把重叠IO操作完成的事件通知放到该队列里,由于是暴露 “操作完成”的事件通知,所以命名为“完成端口”(Completion Ports)。一个socket被创建后,可以在任何时刻和一个完成端口联系起来。
最后
以上就是高贵火车为你收集整理的Delphi 完成端口相关函数的全部内容,希望文章能够帮你解决Delphi 完成端口相关函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复