Multithreading Indy 10 TcpServer创建新线程
在上,Remy Lebeau提供了一个很好的示例,用于在TIdTCPServer.OnExecute过程中使用外部TIdContext。但这只适用于印第9号。Indy 10引入了一种新的线程机制。TIdContext不再直接连接到连接。现在如何创建一个新线程,例如断开连接或向客户端写入一些数据 在上,Remy Lebeau提供了一个很好的示例,用于在TIdTCPServer.OnExecute过程中使用外部TIdContext 这篇文章只是StackOverflow上这个问题的一面镜子: 但这只适用于印第9号 不是真的。这个例子是为印地10号写的 Indy 10引入了一种新的线程机制。TIdContext不再直接连接到连接Multithreading Indy 10 TcpServer创建新线程,multithreading,connection,indy10,tcpserver,Multithreading,Connection,Indy10,Tcpserver,在上,Remy Lebeau提供了一个很好的示例,用于在TIdTCPServer.OnExecute过程中使用外部TIdContext。但这只适用于印第9号。Indy 10引入了一种新的线程机制。TIdContext不再直接连接到连接。现在如何创建一个新线程,例如断开连接或向客户端写入一些数据 在上,Remy Lebeau提供了一个很好的示例,用于在TIdTCPServer.OnExecute过程中使用外部TIdContext 这篇文章只是StackOverflow上这个问题的一面镜子: 但这
TIdContext
实际上是在Indy 10中引入的,用于将用户数据与线程分离。其思想是允许每客户端上下文在多个线程/光纤之间移动1。但是,TIdContext
确实有一个warn
属性,可以将该属性类型转换为TIdYarnOfThread
,以访问当前运行TIdContext
的底层TIdThreadWithTask
1:但实际上,线程从来没有实现过这一点,光纤支持也不起作用,所以被放弃了
Indy 9和更早版本使用TIdPeerThread
直接在线程中跟踪用户数据TIdPeerThread
在Indy 10中不存在,它被替换为TIdThreadWithTask
和TIdContext
(源于TIdTask
)
现在如何创建一个新线程,例如断开连接或向客户端写入一些数据
如果要在Indy 10中为TIdTCPServer
创建自定义线程类,而不是(或者可能是附加)自定义上下文类,则可以执行以下操作:
- 根据需要从
和TIdThreadWithTask
其override
方法派生自定义类virtual
- 将
组件(TIdSchedulerOfThread…
或TIdSchedulerOfThreadDefault
)显式分配给TIdSchedulerOfThreadPool
属性。如果不执行此操作,TIdTCPServer.Scheduler
将为其自身创建一个内部TIdTCPServer
,您将没有机会告诉它要使用哪种类型的线程类TIdSchedulerOfThreadDefault
- 将线程类类型分配给调度程序的
属性ThreadClass
TIdPeerThread
和设置TIdTCPServer.ThreadClass
派生