关于 TidTcpServer cpu占用率过高的问题

searoom 2011-03-14 11:51:56
我只是简单的在 onconnect 中取得连接,然后在 onexecute 中响应客户端的简单请求。

已经确认客户端并没有发送命令了,只是 connect 没有断开还保持了而已,

此事 服务端程序的 cpu 占用率会很大,一直维持在 90% 以上。


不太理解这是为什么。
...全文
346 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
searoom 2011-03-14
  • 打赏
  • 举报
回复
再次感谢,给分了
goodhj 2011-03-14
  • 打赏
  • 举报
回复
都是自动的,放一个上去,IdTCPServer的 ThreadMgr属性里选上就好了,不需要代码
IdThreadMgrPool是管理线程池,连接比较多的话,频繁的连接的话用这个比较好。

原理嘛就看看帮助
searoom 2011-03-14
  • 打赏
  • 举报
回复
谢谢 goodhj ,加入 IdThreadMgrDefault 后确实减少了很多,然后我又在 Execute() 事件里面第一行写了 sleep(100),cpu 占用率就降下来了。

goodhj 能否讲讲 IdThreadMgrDefault 以及 IdThreadMgrPool 的用法及原理吗?
goodhj 2011-03-14
  • 打赏
  • 举报
回复
if AThread.Terminated then
exit;
if not AThread.Connection.Connected then
exit;

//if not AThread.Connection.IOHandler.Readable() then这个判断不要了
// exit;
searoom 2011-03-14
  • 打赏
  • 举报
回复
我在 Execute 中有这两个判断,早成我以为 Execute 并没有执行
if not AThread.Connection.Connected then
exit;
if not AThread.Connection.IOHandler.Readable() then
exit;

后来加入测试代码在这两个语句上面,才发现 Execute 会不停的执行。


to: alanhao
我是想保持当前在线的名单,所以,不想直接断开客户端连接。
alanhao 2011-03-14
  • 打赏
  • 举报
回复
监听也是需要消耗cpu的
建议随时断开不活跃的线程。
goodhj 2011-03-14
  • 打赏
  • 举报
回复
有IdThreadMgrDefault线程管理控件吗?
connect 没有断开就表示线程还在,比如你有100个TCP连接就会开100个线程,虽然没有发指令,但那100个线程仍然还是在运行的。只不过onexecute不执行

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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