【问题标题】:Indy, Send Thread and Destroyed ContextsIndy、Send Thread 和 Destroyed Contexts
【发布时间】:2009-10-07 10:01:53
【问题描述】:

我使用 Indy 的 TIdTCPServer(D2009,Indy 10)与客户端应用程序通信。在 OnExecute 方法中,我创建了一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后发送队列将响应发送给客户端。

在发送线程中,我遍历服务器的上下文列表并查找与存储在任务中的 IP 和端口信息匹配的上下文。然后遵循一些有时会引发访问冲突的发送命令(我猜上下文在发送过程中被破坏了)。

现在问题是:如何确保在发送响应之前上下文没有关闭? Indy 是否可以从单独的线程发送,或者一切都应该在 Indy 线程中完成?

【问题讨论】:

    标签: delphi tcp delphi-2009 indy


    【解决方案1】:

    您可以尝试在发送数据时保持 TIdTCPServer.Contexts 列表锁定,因为上下文在从列表中删除之前不会被释放。缺点是在发送过程中不会处理任何客户端连接/断开连接/发送。

    或者,只需将您的发送代码包装在 try/except 块中,并忽略可能发生的任何错误。

    或者,如果您可以重新编写代码以将发送队列移动到上下文本身,那将是最好的,是的。然后您的 OnExecute 事件处理程序可以定期检查队列并在可用时发送数据。这也将有助于提高性能,因为如果您同时为多个客户端准备好传出数据,则不再序列化发送。

    【讨论】:

    • +1 谢谢!我正在考虑重组并将所有通信代码放在 OnExecute 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2013-04-28
    相关资源
    最近更新 更多