我使用Indy的TidtcpServer(D2009,Indy10)与客户机应用程序通信。在onexecute方法中,我创建一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后,发送队列将响应发送到客户端。
在发送线程中,我循环访问服务器的上下文列表,并查找与存储在任务中的IP和端口信息匹配的上下文。然后执行一些发送命令,这些命令有时会引发访问冲突(我猜上下文在发送过程中会被破坏)。
现在要问的是:在我发送响应之前,如何确保上下文没有关闭?印地有可能从一个单独的线程发送,还是应该在印地线程中完成所有操作?

最佳答案

在发送数据时,可以尝试保持tidtcpserver.contexts列表处于锁定状态,因为只有在将其从列表中删除后,才会释放该上下文。缺点是,在进行一次发送时,不会处理任何客户端连接/断开连接/发送。
或者,只需将发送代码包装在try/except块中,忽略可能发生的任何错误。
或者,如果您可以重新编写代码以将发送队列移动到上下文本身,那将是最好的,是的。然后,onexecute事件处理程序可以定期检查队列,并在可用时发送数据。这也有助于提高性能,因为如果同时为多个客户机准备好了传出数据,那么就不再序列化发送了。

关于delphi - Indy,发送线程和被破坏的上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1530634/

10-12 07:28
查看更多