Delphi XE2、Indy V10、Windows 7 Pro - 但我认为我有一个普遍的概念问题。
- Indy 的 TCP 客户端是同步的——它使用阻塞调用。
- 但是我的应用程序的某些部分是异步的 - 我想通过 TCP 发送数据并等待响应
A)第 3 方串行端口组件报告来自串行端口的输入(它似乎是异步的并在它自己的线程中运行,发布消息到我的应用程序的主窗体的 Windows 消息队列)和
B)当几个计时器之一到期时(也是异步的) 我的应用程序对这些异步事件的处理需要进行阻塞调用以通过 TCP 发送数据并在发送下一个 TCP 数据之前获得响应。例如
procedure OnSerialPortRxChar(...); begin if SendTCpData(...) = 'OK' then ... end; procedure OnTimerExpiry(...); begin if SendTCpData(...) = 'OK' then ... end;
这些不应该互相打断,但目前可以。
显然,我的函数SendTCpData
需要某种阻塞机制来防止重入调用,或者需要排队机制。鉴于调用者需要知道结果,我最好的解决方案是互斥体吗?问题在于 TCP 事务只是SendTCpData
那些异步事件可以调用的 20 行函数中的一行。
我希望我已经解释清楚了。如果没有,请索取更多信息。
非常感谢您的帮助。