delphi自带的ServerSocket帮助是不是有些误导?(100分)

  • 主题发起人 主题发起人 时报平
  • 开始时间 开始时间

时报平

Unregistered / Unconfirmed
GUEST, unregistred user!
我看到设定ServerType 为stThreadBlocking时,delphi自带的帮助中提示如下:
Set ServerType to stThreadBlocking to automatically spawn a new thread for each socket connection accepted by the server socket. When ServerType is stThreadBlocking, the execution of the connection thread is suspended while reading or writing until all information has been transferred over the connection. The thread for each connection generates OnClientRead or OnClientWrite events when the server socket needs to read or write.
......
我想,OnClientRead 应该可以读取到socket中传来的数据,事实上,却根本不能接收到,
又在DFW里查了查,说是在ServerType 设为stThreadBlocking时,OnClientRead 不能接收到数据,要在OnGetThread事件中才能接收。
我试了试,果然如此,那么帮助中是不是有些误导呀,还是我理解错了?
我又看了帮助中对OnClientRead解释的部分,有以下内容
Note: If ServerType is stThreadBlocking, make sure that all code in an OnClientRead event handler is thread-safe. Use the GetClientThread method of the Sender parameter to access thread-specific information.
这里提到了使用GetClientThread 访问指定线程的信息,但还提到了在OnClientRead 事件中,代码要是线程安全的,但是实际OnClientRead 事件根本没有触发呀?
帮助中是不是有些误导呀,还是我理解错了?
 
这两天把ServerSocket帮助仔细看了看,在TCustomServerSocket.OnClientConnect部分导是写得很清楚,
5 If ServerType is stThreadBlocking and no thread is available in the cache, an OnGetThread event occurs. If the OnGetThread event handler does not create a thread, the server socket creates a TServerClientThread.
.........
Note: If ServerType is stThreadBlocking, make sure that all code in an OnClientConnect event handler is thread-safe. Use the GetClientThread method of the Sender parameter to access thread-specific information.
大意是说:5、如果ServerType是stThreadBlocking,并且缓冲区中没有可用的线程,OnGetThread

事件会发生,如果OnGetThread事件句柄没有创建线程,服务器socket将会创建

TServerClientThread。
........
如果ServerType是stThreadBlocking,确保OnClientConnect事件里的代码是线程安全的
使用GetClientThread方法参数来访问指定的线程信息。

这说明,ServerType是stThreadBlocking,就在GetClientThread事件中访问相应参数进行处理线程信息数据。
根本没提到OnClientRead 事件!
 
你看看源代码不就知道了啊。
 
后退
顶部