请问完成端口为什么多出6个线程

yomi 2003-09-29 11:15:00
我用两个线程调用了GetQueuedCompletionStatus,在加上一个界面一个监听连接。
但是我在任务管理器里却看到了10个线程。请教!
...全文
80 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yomi 2003-10-11
  • 打赏
  • 举报
回复
结贴,送分。
yomi 2003-10-09
  • 打赏
  • 举报
回复
三位结贴给分。

ADO什么的我是用了,可是还没有调用到。
programming server-side以及windows network programming我都看过了。
均没有提到线程的事。
CPU占用我原来也想是循环造成的,可是我搜索了所有的循环,都不对啊。
而且在客户端不循环连接的时候,CPU占用是很低的。
sunhuiNO1 2003-10-05
  • 打赏
  • 举报
回复
估计你用了ADO什么的,
photoman 2003-10-02
  • 打赏
  • 举报
回复
完成端口得工作线程是你控制开得,多出来得线程可能是程序里其他地方你调用得某些函数开得,cpu占用率高可能就是你得程序问题了,随便一个while就能把cpu占用率提到100%,一般完成端口占用率不会高过60%得,sleep最好还是用sleepex比较好一点
sevencat 2003-10-02
  • 打赏
  • 举报
回复
完成端口还是看看那本服务器SIDE编程好了,那里面有对这个的讲解,是我看到的完成端口不多的资料之一。
可能createioocompletionport中也顺便生成了几个线程。
你又有两个工作线程另外还有个主线程。
http://www.bjdt2.com/bbs/book/e5/other/microsoft/programming.htm
有上面这本书下。
了解工作原理后可能好点吧。
modnar 2003-09-30
  • 打赏
  • 举报
回复
我的意思是用AppWizard生成一个什么都不做的程序,
运行后看看他的线程数是不是应该为0
yomi 2003-09-30
  • 打赏
  • 举报
回复
philis,
为什么要sleep啊?

lightest,
我猜可能是GetQue...这个加入完成端口队列的函数。
yomi 2003-09-30
  • 打赏
  • 举报
回复
你认为这些线程是我开的?我跟踪过所有的CreateThread,我的确只开了三次。
modnar 2003-09-30
  • 打赏
  • 举报
回复
我倒,你写一个不CreateThread的程序运行后看看它有几个线程.
yomi 2003-09-30
  • 打赏
  • 举报
回复
我想也是,结贴后给你分。
还有一个问题,我发现使用完成端口的程序cpu占用很高,
我的程序的循环都是阻塞方式的,而且只有一个客户端与它连接(不停的连接,收发数据,断开),而客户端的CPU占用就很低。
再请教。
Lightest 2003-09-30
  • 打赏
  • 举报
回复
有的API调用将启动后台线程
例如某些socket函数,netbios,gethostbyname等,你可以在一些可疑API设置断点跟踪发现.
philis 2003-09-30
  • 打赏
  • 举报
回复
完成端口还那个高?不对吧。你是不是没有Sleep一下?
yomi 2003-09-30
  • 打赏
  • 举报
回复
难道不是1?
broadken 2003-09-29
  • 打赏
  • 举报
回复
很正常把。改种io 不是有thereads 池。我想使不是管理该池的threads
yomi 2003-09-29
  • 打赏
  • 举报
回复
你是说哪里用到了?我没有TIMER。
everandforever 2003-09-29
  • 打赏
  • 举报
回复
肯定是你的程序哪里用到啦.
比如 SETTIMER 会创建一个
完成端口通讯服务器(IOCP Socket Server)设计 (六)功能强大的IOCP Socket Servre模块例程源码 Copyright © 2009 代码客(卢益贵)版权所有 QQ:48092788 源码博客:http://blog.csdn.net/guestcode 一、声明 版权声明: 1、通讯模块代码版权归作者所有; 2、未经许可不得全部或部分用于任何项目开发; 3、未经许可不得部分修改后再利用源码。 免责声明: 1、 由于设计缺陷或其它Bug造成的后果,作者不承担责任; 2、未经许可的使用作者不提供任何技术支持服务。 权利和义务: 1、任何获得源码并发现Bug的个人或单位均有义务向作者反映; 2、作者保留追究侵权者法律责任的权利。 二、开发背景 部分代码由前项目分离而来,尚未有应用考验,但对于初学者学习和进阶有很大帮助。性能上尚未有定论,但应该不会令你失望。 三、功能说明 1、可以关闭Socket的Buffer; 2、可以关闭MTU(不等待MTU满才发送); 3、可以多IP或多端口监听; 4、可以重用socket(主动关闭除外); 5、可以0缓冲接收(Socket的Buffe = 0时,避免过多的锁定内存页); 6、可以0缓冲连接(客户端仅连接,不一定立即发数据); 7、可以条件编译: a、是否使用内核Singly-linked lists; b、是否使用处理线程(工作线程和处理线程分开); c、是否使用内核锁来同步链表。 8、可以实现集群服务器模式的通讯(有客户端socket); 9、可以单独设置每个连接的Data项来实现连接和Usernfo的关联; 10、每个线程有OnBegin和OnEnd,用于设置线程独立的对象(数据库会话对象); 11、可以提供详细的运行情况,便于了解IOCP下的机制,以及进行调试分析; 12、可以发起巨量连接和数据(需要硬件配置来支持)。
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧