zoukankan      html  css  js  c++  java
  • INDY9線程池機理

    針對INDY9版本

    // 使用完的線程歸還線程池

    procedure TIdThreadMgrPool.ReleaseThread(AThread: TIdThread);

    var

      LThreadPool: TList;

    begin

      ActiveThreads.Remove(AThread);

      LThreadPool := FThreadPool.LockList;

      try

      // PoolSize = 0 means that we will keep all active threads in the thread pool

        if ((PoolSize > 0) and (LThreadPool.Count >= PoolSize)) or AThread.Terminated then begin

          if IsCurrentThread(AThread) then begin

            AThread.FreeOnTerminate := True;

            AThread.Terminate;

          end else begin

            if not AThread.Stopped then

            begin

              AThread.TerminateAndWaitFor;

            end;

            AThread.Free;

          end;

        end else begin

          if not AThread.Suspended then begin

            AThread.OnStopped := ThreadStopped;

            AThread.Stop;

          end

          else begin

            AThread.Free;

          end;

        end;

      finally FThreadPool.UnlockList; end;

    end;

     

    創建線程池的時候不會一運行就創建N個線程

     

    當一個客戶第一次建立連接,才會在池內創建一個線程,用完後掛起,直至線程數量 > poolsize,所以poolsize不要設的過大。

    poolsize=0 線程池完全不起作用

     

  • 相关阅读:
    UVA11367 Full Tank?
    不均衡样本集问题
    NLP interview
    Linux 指令
    Python 趣题
    Grid Illumination
    动态规划-Minimum Cost to Merge Stones
    Contest 141
    Python join()方法
    Single Number
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940768.html
Copyright © 2011-2022 走看看