ServerSocket非阻塞方式就一个线程,没有建立其他线程,看看delphi帮助吧
When ServerType is stNonBlocking, all client connections are handled in a single execution thread by default. OnClientRead or OnClientWrite events occur when the client socket on the other end of one of the connections tries to send or receive information over the connection.

解决方案 »

  1.   

    在ServerSocket非阻塞方式下创建多线程是可行的,但要解决在线程里vcl控件安全调用的问题,问题可能出在这里。
      

  2.   

    线程再好在什么事件里创建?
    关于VCL问题我是在线程里自己建,不过create时它的所属组件设为主窗体,有没有关系?
      

  3.   

    从你的描述上看,问题不是出在创建的时候,可能是访问了不存在的内存地址而造成的服务器程序整个退出。由于vcl控件封装了很多对象或变量,由于隐藏的很深,我们看不到。当主线程中断服务器连接时,可能释放了某些对象或内存资源,而子线程去访问它就会出问题了。TServerSocket对象如果是在主线程里创建的,就可能存在上述问题。
      

  4.   

    尽管可行但不推荐在非阻塞Socket方式下为每个连接建一个线程.
    反正我只会在阻塞Socket方式下不得已采用多线程..在非阻塞方式是ms winsock相对于UNIX之类的SOCKET 一种特色..
    不管你再开了多少个线程,它的发送和接收事件触发都是在主线程中,
    它相对于阻塞方式,单个线程独立性安全性不强,未必能得到期望的效率。
      

  5.   

    尽管可行但不推荐在非阻塞Socket方式下为每个连接建一个线程.
    反正我只会在阻塞Socket方式下不得已采用多线程..在非阻塞方式是ms winsock相对于UNIX之类的SOCKET 一种特色..
    不管你再开了多少个线程,它的发送和接收事件触发都是在主线程中,
    它相对于阻塞方式,单个线程独立性安全性不强,未必能得到期望的效率。