我只是简单的在 onconnect 中取得连接,然后在 onexecute 中响应客户端的简单请求。已经确认客户端并没有发送命令了,只是 connect 没有断开还保持了而已,此事 服务端程序的 cpu 占用率会很大,一直维持在 90% 以上。
不太理解这是为什么。

解决方案 »

  1.   

    有IdThreadMgrDefault线程管理控件吗?
    connect 没有断开就表示线程还在,比如你有100个TCP连接就会开100个线程,虽然没有发指令,但那100个线程仍然还是在运行的。只不过onexecute不执行
      

  2.   

    监听也是需要消耗cpu的
    建议随时断开不活跃的线程。
      

  3.   

    我在 Execute 中有这两个判断,早成我以为 Execute 并没有执行
    if not AThread.Connection.Connected then
      exit;
    if not AThread.Connection.IOHandler.Readable() then
      exit;后来加入测试代码在这两个语句上面,才发现 Execute 会不停的执行。
    to: alanhao
    我是想保持当前在线的名单,所以,不想直接断开客户端连接。
      

  4.   

    if AThread.Terminated then
       exit;
    if not AThread.Connection.Connected then
       exit;//if not AThread.Connection.IOHandler.Readable() then这个判断不要了
    //  exit;
      

  5.   

    谢谢 goodhj ,加入 IdThreadMgrDefault 后确实减少了很多,然后我又在 Execute() 事件里面第一行写了 sleep(100),cpu 占用率就降下来了。goodhj 能否讲讲 IdThreadMgrDefault 以及 IdThreadMgrPool 的用法及原理吗?
      

  6.   

    都是自动的,放一个上去,IdTCPServer的 ThreadMgr属性里选上就好了,不需要代码
    IdThreadMgrPool是管理线程池,连接比较多的话,频繁的连接的话用这个比较好。原理嘛就看看帮助