gpt4 book ai didi

delphi - Indy 是否在 XP 上使用某种协作式多任务处理,如果是,有没有办法切换到其他连接?

转载 作者:行者123 更新时间:2023-12-03 19:19:31 30 4
gpt4 key购买 nike

我有一个使用 Indy 的 TIdTCPServer 组件运行的 Web 服务器。我有几个请求需要同步,以便在发送前一个请求后处理每个请求。这是使用互斥锁完成的。在 Vista 和 Win7 上,这很好用,但在 XP 上,互斥锁上的等待似乎也会挂起其他连接。它在 5 秒后超时,所以它仍然会继续,但我的应用程序对时间非常敏感。

我假设它在 XP 上是这样的:

连接1:

  • 解析请求
  • 尝试获取互斥锁
  • 成功
  • 做事
  • 回复 -> Indy 借此机会切换话题

  • 连接2:
  • 解析请求
  • 尝试获取互斥锁
  • 超时失败
  • 返回“对不起,超时”-> Indy 切换回连接 1

  • 连接1:
  • 释放互斥锁

  • 如果 Indy 使用这样的协作式多任务处理,我将不得不做其他事情。有谁知道在 XP 上它是否使用协作多任务处理?

    编辑:

    所以,我在 IdYarn 中看到 yarn 现在是一个完全空的对象。尽管如此,问题仍然在于合作多任务处理。

    最佳答案

    TIdTCPServer 中的每个连接都在其自己的工作线程中运行。操作系统而不是 Indy 控制线程之间的任务切换。如果一个线程成功锁定了互斥锁,那么在第一个线程解锁之前,其他线程都不能进入锁。那就是在任何操作系统版本上的多线程编程 101。这种行为并不是 Indy 特有的。您概述的是它应该如何表现。如果 Vista/Win7 的行为不是这样,那么您就有问题了。

    关于delphi - Indy 是否在 XP 上使用某种协作式多任务处理,如果是,有没有办法切换到其他连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351528/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com