问题过于复杂。一个非常直接的解决方案是按照 Uwe 和 David 的建议重新设计:
(1) 工人应用程序。(2) 长时间运行的 TcpServer,等待客户端并调用 worker (3) 客户端。
=========================
我想构建一个SampleApp功能为:
- 启动时,它会检查是否已经在
SampleApp运行; - 如果不是,它启动 a
TcpServer, aTcpClient,将某个命令从它传递TcpClient到它的TcpServer,完成工作,关闭TcpServer,然后退出; - 如果是,它启动 a
TcpClient,将命令传递给另一个TcpServer并退出。(其他人TcpServer会做这项工作。) SampleApp当第一个仍在运行时,可能有多个启动。
我不知道如何实际解决这个问题,例如:
- 从哪个架构开始?(著名的 OmniThreadLibrary 似乎处理基于线程的并发,而不是基于操作系统进程的并发。)
- 没有
SampleApp跑步。两个SampleApp(几乎)同时启动。如何保证只启动一个 TcpServer?(没有“全局列表”来注册传入的“玩家”。) - 有一个
SampleApp正在运行。如果 2nd 检测到 1st 的 mutex 并因此决定成为 TcpClient,但 1st 停止其 TcpServer 并退出,如何处理?
任何见解表示赞赏!