Windows平台下实现单进程单线程完成端口的方法技术

技术编号:26790462 阅读:30 留言:0更新日期:2020-12-22 17:05
本发明专利技术提供了一种Windows平台下实现单进程单线程完成端口的方法,属于计算机编程技术领域。该方法在使用完成端口时,在线程中使用GetQueuedCompletionStatus阻塞等待完成端口的事件发生,并根据GetQueuedCompletion Status参数中返回的信息处理相应的操作,这一过程放到主线程完成,同时使GetQueuedCompletionStatus不阻塞,在绑定完成端口时将线程数设置为1,从而实现单进程单线程完成端口。

【技术实现步骤摘要】
Windows平台下实现单进程单线程完成端口的方法
本专利技术涉及计算机编程
,尤其涉及一种Windows平台下实现单进程单线程完成端口的方法。
技术介绍
在网络通信模型中,涉及到几个概念,同步、异步、阻塞和非阻塞。同步函数一般指调用函数后,等到函数功能实现再返回,期间一直霸占的CPU,等待期间同一个线程无法执行其他函数。异步函数指调用函数后,不管函数功能是否实现,立马返回;通过回调函数等告知函数功能完成。调用某些函数阻塞是因为函数功能没有实现,主动放弃CPU,让其他线程的得以执行;当功能实现后,函数返回;调用某些函数不会进入阻塞,无论实现与否,都会返回结果。Windows下面的网络通信模型主要有以下几种:1.select模型,为定期检查模型。一个线程用于accept客户端的接入,一个线程用于select数据的收发。该模型接收客户端连接属于同步(阻塞)模式,数据收发属于异步模式。2.WSAAsyncSelect模型,为窗口事件通知模型。在一个线程中,将客户端socket和hWnd窗口句柄的消息事件关联,通过FD类别本文档来自技高网...

【技术保护点】
1.一种Windows平台下实现单进程单线程完成端口的方法,其特征在于,包括以下步骤:/nS1:创建一个完成端口,线程数设为1;/nS2:服务端创建一个socket;/nS3:将创建的socket与创建的完成端口绑定,绑定时,线程数设为1;/nS4:取得用于完成端口的accept_ex函数指针;/nS5:投递accept_ex操作事件到完成端口的队列中;/nS6:循环调用GetQueuedCompletionStatus()函数,每次调用采用即时返回的非阻塞模式。/n

【技术特征摘要】
1.一种Windows平台下实现单进程单线程完成端口的方法,其特征在于,包括以下步骤:
S1:创建一个完成端口,线程数设为1;
S2:服务端创建一个socket;
S3:将创建的socket与创建的完成端口绑定,绑定时,线程数设为1;
S4:取得用于完成端口的accept_ex函数指针;
S5:投递accept_ex操作事件到完成端口的队列中;
S6:循环调用GetQueuedCompletionStatus()函数,每次调用采用即时返回的非阻塞模式。


2.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于:
步骤S1中,使用CreateIoCompletionPort()函数创建完成端口,将CreateIoCompletionPort()函数中的参数NumberOfConcurrentThreads设置为1;
步骤S3中,使用CreateIoCompletionPort()函数将创建的socket与创建的完成端口绑定,且将CreateIoCompletionPort()函数中的参数NumberOfConcurrentThreads设置为1。


3.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,步骤S6中,通过将GetQueuedCompletionStatus()函数中的参数dwMilliseconds设置为0,实现即时返回的非阻塞模式。


4.根据权利要求1所述的实现单进程单线程完成端口的方法,其特征在于,在步骤S6中,每次调用GetQueuedCompletionStatus()函数后,还进行如下步骤S7操作:
根据GetQueuedCompletionStatus()函数的返回值的不同,进行对应于返回值的数据处理。


5.根据权利要求4所述的实现单进程单线程完成端口的方法,其特征在于,当GetQueuedCompletionStatus()函数的参数lpComplet...

【专利技术属性】
技术研发人员:吴建亮胡鹏符元湘
申请(专利权)人:广州锦行网络科技有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1