【发布时间】:2013-08-31 18:08:16
【问题描述】:
问题过于复杂。一个非常直接的解决方案是按照 Uwe 和 David 的建议重新设计:
(1) 工作应用程序。 (2) 长时间运行的 TcpServer,等待客户端并调用 worker (3) 客户。
==========================
我想建立一个SampleApp,它的功能是:
- 启动时会检查是否已经有
SampleApp在运行; - 如果没有,它会启动一个
TcpServer,一个TcpClient,将某个命令从它的TcpClient传递给它的TcpServer,完成工作,关闭TcpServer,然后退出; - 如果是,它启动一个
TcpClient,将命令传递给另一个TcpServer,然后退出。 (其他人的TcpServer将完成这项工作。) - 可能有多个
SampleApp在第一个仍在运行时启动。
我不知道如何实际解决这个问题,例如:
- 从哪个架构开始? (著名的 OmniThreadLibrary 似乎处理基于线程的并发,而不是基于操作系统进程的并发。)
- 没有
SampleApp正在运行。两个SampleApp(几乎)同时启动。如何保证只启动一个 TcpServer? (没有“全局列表”来注册传入的“玩家”。) - 有一个
SampleApp正在运行。如果 2nd 检测到 1st 的 mutex 并因此决定成为 TcpClient,但 1st 停止其 TcpServer 并退出,如何处理?
感谢任何见解!
【问题讨论】:
-
该线程似乎无法解决我的问题。比如,2nd检测到1st的mutex,决定做TcpClient,1st停止了自己的TcpServer,退出了怎么办?
-
我在您的问题中没有看到这种情况。
-
您将总是在启动/关闭时有一点开销时间,因此永远无法防止一个人看不到另一个人的可能性,只能尽量减少。
-
为什么不在Windows启动时将tcpserver作为服务启动并让它永远运行?
标签: delphi concurrency