OS进程之间的并发性

时间:2013-08-28 15:11:47

标签: delphi concurrency

问题过于复杂。一个非常直接的解决方案是重新设计为Uwe和David建议:

(1)工人应用程序。 (2)长时间运行的TcpServer,等待客户端并调用worker (3)客户。

========================

我想构建一个SampleApp,其功能如下:

  • 启动时,会检查是否已SampleApp正在运行;
  • 如果没有,则会启动TcpServerTcpClient,将某个命令从其TcpClient传递到TcpServer,完成工作,关闭TcpServer },并退出;
  • 如果是,则启动TcpClient,将命令传递给其他人TcpServer并退出。 (另一个TcpServer将完成工作。)
  • 当第一个SampleApp仍在运行时,可能会启动多个SampleApp

我不知道如何实际解决这个问题,例如:

  1. 从哪个架构开始? (着名的OmniThreadLibrary似乎处理基于线程的并发而不是基于操作系统进程的并发。)
  2. 没有SampleApp正在运行。两个SampleApp同时启动(几乎)。如何保证只启动一个TcpServer? (没有“全局列表”来注册传入的“玩家”。)
  3. 正在运行一个{{1}}。如果第二个检测到第一个互斥锁并因此决定是一个TcpClient,如何处理,但第一个停止其TcpServer并退出?
  4. 任何见解都表示赞赏!

1 个答案:

答案 0 :(得分:0)

如果您想主要使用它来在单个计算机上的进程之间进行通信(在单个用户会话中),那么您应该喜欢ActiveX Automation Objects。创建使用LocalServer的COM对象将为您启动和停止“服务器”进程。

在此处查看更多内容:http://docwiki.embarcadero.com/RADStudio/XE4/en/Creating_an_Active_Server_Object

如果您坚持使用TTcpServer,当两个进程同时启动时,仍然只允许一个进程绑定到某个TCP端口,另一个进程在TTcpServer上调用Listen时会出现异常。