Delphi Indy,发送线程并销毁上下文
我使用Indy的TIdTCPServer(D2009,Indy 10)与客户端应用程序通信。在OnExecute方法中,我创建了一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后,发送队列将响应发送到客户端 在发送线程中,我循环遍历服务器的上下文列表,并查找与任务中存储的IP和端口信息匹配的上下文。然后遵循一些send命令,这些命令有时会抛出访问冲突(我猜上下文在发送过程中会被破坏)Delphi Indy,发送线程并销毁上下文,delphi,tcp,delphi-2009,indy,Delphi,Tcp,Delphi 2009,Indy,我使用Indy的TIdTCPServer(D2009,Indy 10)与客户端应用程序通信。在OnExecute方法中,我创建了一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后,发送队列将响应发送到客户端 在发送线程中,我循环遍历服务器的上下文列表,并查找与任务中存储的IP和端口信息匹配的上下文。然后遵循一些send命令,这些命令有时会抛出访问冲突(我猜上下文在发送过程中会被破坏) 现在我要问的问题是:在发送响应之前,如何确保上下文没有关闭?Indy是否可以从单独的线程发送数据,或者
现在我要问的问题是:在发送响应之前,如何确保上下文没有关闭?Indy是否可以从单独的线程发送数据,或者所有操作都应该在Indy线程中完成?您可以尝试在发送数据时锁定TIdTCPServer.Contexts列表,因为上下文直到从列表中删除后才会释放。缺点是,当一次发送正在进行时,不会处理任何客户端连接/断开连接/发送 或者,只需将发送代码包装在try/except块中,并忽略可能发生的任何错误
或者,如果您可以重新编写代码以将发送队列移动到上下文本身中,那么最好是这样,是的。然后,OnExecute事件处理程序可以定期检查队列,并在可用时发送数据。这也将有助于提高性能,因为如果同时为多个客户端准备好了传出数据,则不再序列化发送。+1谢谢!我正在考虑重组,并将所有通信代码放在OnExecute中。