TServerSocket的threadBlocking的问题(50分)

  • 主题发起人 主题发起人 wyly
  • 开始时间 开始时间
W

wyly

Unregistered / Unconfirmed
GUEST, unregistred user!
当一个client连上时,
TServerSocket->Socket->ActiveConnections

TServerSocket->Socket->ActiveThreads
为1。

可是当这个client断开后
TServerSocket->Socket->ActiveConnections

TServerSocket->Socket->ActiveThreads
还是为1。

为什么?

 
TServerSocket有一个ThreadCacheSize,default:10,这是Thread Pooling
只有线程模式才有的,非阻塞没有,当客户断开时,它根据Keep...属性来决定是否
释放那个线程,当有客户时,它再唤醒这个线程.所以当你的Server Thread超过ThreadCacheSize
时,才会断开客户ActiveConnections才会-1

 
那ActiveCOnnection为什么也不正确?
还有Keep。。。这个是什么属性呀?
呵呵,不好意思,老问问题
 
Keep...我忘了。它是TServerClientThread的属性,你看一下
就是因为你连接的线程是Pooling线程,所以Keep。。。:=true,所以它就不Free,Active...之类的
自然为1,你只要将TServerSocket.ThreadCacheSize设为0,就会一切正常。它只是使TServerSocket
有Thread Pooling作用,才将它保留,就像你经常用过一个函数:
procedure Proc
var
object: TSomeObject;
begin
Object := TSomeObject.create;
...
Object.Free;
end;
你如果这个函数使用频率很高,那你最好将它pool,减少Create 和Free时间。
明白不明白。
 
呵呵,明白明白
 
后退
顶部