如何关闭完成端口

时间:2022-02-21 23:52:42
使用CreateIoCompletionPort创建完成端口,当服务完成后,如何关闭这个完成端口

8 个解决方案

#1


呵呵,这倒是个问题,我帮你找找看

#2


CloseHandle keyibaportshifang

#3


是不是应该把创建的句柄关闭了就可以了?
用closeHandle()
我想这样是可以的吧,其他的事情系统来处理

#4


感谢楼上两位的回复
刚才我找到一段相关资料,向各位奉上(来源<windows网络编程技术>,8.2.5完成端口模型)

如何正确地关闭I / O完成端口—特别是同时运行了一个或多个线程,在几个不同的套接字上执行I / O操作的时候。要避免的一个重要问题是在进行重叠I / O操作的同时,强行释放一个O V E R L A P P E D结构。要想避免出现这种情况,最好的办法是针对每个套接字句柄,调用c l o s e s o c k e t函数,任何尚未进行的重叠I / O操作都会完成。一旦所有套接字句柄都已关闭,便需在完成端口上, 终止所有工作者线程的运行。要想做到这一点, 需要使用P o s t Q u e u e d C o m p l e t i o n S t a t u s函数,向每个工作者线程都发送一个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”。(下面说明请参阅该函数声明)
其中, C o m p l e t i o n P o r t参数指定想向其发送一个完成数据包的完成端口对象。而就d w N u m b e r O f B y t e s Tr a n s f e r r e d、d w C o m p l e t i o n K e y和l p O v e r l a p p e d这三个参数来说,每一个都允许我们指定一个值,直接传递给G e t Q u e u e d C o m p l e t i o n S t a t u s函数中对应的参数。这样一来,一个工作者线程收到传递过来的三个G e t Q u e u e d C o m p l e t i o n S t a t u s函数参数后,便可根据由这三个参数的某一个设置的特殊值,决定何时应该退出。例如,可用d w C o m p l e t i o n P o r t参数传递0值,而一个工作者线程会将其解释成中止指令。一旦所有工作者线程都已关闭,便可使用C l o s e H a n d l e函数,关闭完成端口,最终安全退出程序。

#5


学习中

#6


结帖

#7


我已经把该完成端口的章节整理后贴上来了
大家看看
http://www.csdn.net/expert/topic/663/663793.xml?temp=.2563593

#8


:(
我倒,帖子对字母竟然不换行,大家只好用源文件方式看了

#1


呵呵,这倒是个问题,我帮你找找看

#2


CloseHandle keyibaportshifang

#3


是不是应该把创建的句柄关闭了就可以了?
用closeHandle()
我想这样是可以的吧,其他的事情系统来处理

#4


感谢楼上两位的回复
刚才我找到一段相关资料,向各位奉上(来源<windows网络编程技术>,8.2.5完成端口模型)

如何正确地关闭I / O完成端口—特别是同时运行了一个或多个线程,在几个不同的套接字上执行I / O操作的时候。要避免的一个重要问题是在进行重叠I / O操作的同时,强行释放一个O V E R L A P P E D结构。要想避免出现这种情况,最好的办法是针对每个套接字句柄,调用c l o s e s o c k e t函数,任何尚未进行的重叠I / O操作都会完成。一旦所有套接字句柄都已关闭,便需在完成端口上, 终止所有工作者线程的运行。要想做到这一点, 需要使用P o s t Q u e u e d C o m p l e t i o n S t a t u s函数,向每个工作者线程都发送一个特殊的完成数据包。该函数会指示每个线程都“立即结束并退出”。(下面说明请参阅该函数声明)
其中, C o m p l e t i o n P o r t参数指定想向其发送一个完成数据包的完成端口对象。而就d w N u m b e r O f B y t e s Tr a n s f e r r e d、d w C o m p l e t i o n K e y和l p O v e r l a p p e d这三个参数来说,每一个都允许我们指定一个值,直接传递给G e t Q u e u e d C o m p l e t i o n S t a t u s函数中对应的参数。这样一来,一个工作者线程收到传递过来的三个G e t Q u e u e d C o m p l e t i o n S t a t u s函数参数后,便可根据由这三个参数的某一个设置的特殊值,决定何时应该退出。例如,可用d w C o m p l e t i o n P o r t参数传递0值,而一个工作者线程会将其解释成中止指令。一旦所有工作者线程都已关闭,便可使用C l o s e H a n d l e函数,关闭完成端口,最终安全退出程序。

#5


学习中

#6


结帖

#7


我已经把该完成端口的章节整理后贴上来了
大家看看
http://www.csdn.net/expert/topic/663/663793.xml?temp=.2563593

#8


:(
我倒,帖子对字母竟然不换行,大家只好用源文件方式看了