我有两个应用程序:X和Y. X是主要的应用程序,它处理大量的XML文件.它有十多年的历史,已经使用了六种技术来存储,处理和处理这些XML文件.我是一个正在开发的调试工具,它可以以更加人性化的方式处理和显示XML文件形成.基本上,它只是一个样式表的集合,将检测XML格式,如果它识别格式,它会将XML转换为显示在TWebbrowser组件中的HTML.问题:当Y是活动的时候,我希望X发送任何XML用于显示目的.但只有当Y运行时!如果Y没有运行,X就不会做任何事情.任何时候需要完成Y的检测,需要快速.我考虑过使用TCP / IP通信,但由于缺少Y引起的延迟太长了.特别是因为很多XML被处理有时.命名管道和类似的基于网络的解决方案也是一样的问题.我需要快速确定Y是否正在运行和可用,如果是,请快速发送XML,然后继续X.我还认为使Y成为基于COM的应用程序,或者可能添加一个基于COM的DLL,并允许进程间通信. DLL解决方案将是有趣的,因为它会向X公开一个方法来上传XML文件,然后将事件发送给Y来处理XML.这似乎是最好的选择,虽然我还需要检查DLL是否被注册.如果没有,那么X甚至不能调用它!应用程序X也将被不会收到Y或附加DLL的客户使用,因此在大多数情况下,DLL不会被注册. (正如我所说,这是在调试期间帮助…)但也许还有其他选择? TCP / IP太慢,COM有点太复杂了. X和Y将在同一系统上运行.或者只是X将在系统上,Y完全丢失.

关于使用内存映射文件…实际上,我需要记住,大多数时候,Y将不会运行,因此MMF会浪费内存. XML数据在X内的大小可以达到4 MB,因此内存中这个大小的多个块有点过分.它可以用于在X和Y之间发送状态消息,但是内存有时候与应用程序X有一点问题.虽然MMF可以连接到一个物理文件,但我试图避免完全写入任何临时文件.它的一个很好的解决方案,但我害怕不够好.

我想,还有一些额外的解释是正确的.应用程序X是一个将要使用几个小时的应用程序,用户可以通过大量的操作来转换大量的XML数据.应用程序X是与几个Web应用程序(REST),Web服务(SOAP)和其他应用程序进行通信的桌面应用程序,其中大部分是通过XML.Application Y仅用于窥视X正在运行的进程.基本上,X工作20分钟,Y弹出.从那时起,X应该开始发送XML到Y,直到Y再次消失或者直到X被终止.在大多数情况下,Y只会运行,以捕获正在运行的任务的一小部分,甚至可能会多次启动.但是我可能正在考虑整个事情在错误的方向.也许X应该是一个服务器,Y注册它…这不是一个真正的问题,当Y找不到X.但是X没有找到Y不会导致延迟或其他问题…

解决方法

你可以更简单地做,因为你只是试图找出一个应用程序是否从另一个运行.只要它们在同一台机器上由同一用户运行,您可以让X只需使用 FindWindow()来查看Y是否正在运行.只要确保你给Y一个有意义的名字(在下面的示例中,它是TXMLFormatterForm):
var
  XMLWindow: HWnd;
begin
  XMLWindow := FindWindow('TXMLFormatterForm',nil);
  if XMLWindow > 0 then
    // Y is running
end;

你也可以使用Y的窗口标题(title),只要你确定它是不同的:

XMLWindow := FindWindow(nil,'Workshop Alex's XML Formatter');

delphi – 进程间通信的更多相关文章

  1. 详解html5 postMessage解决跨域通信的问题

    这篇文章主要介绍了详解html5 postMessage解决跨域通信的问题的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5调用手机发短信和打电话功能

    这篇文章主要介绍了HTML5调用手机发短信和打电话功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 真正的iOS设备和Watch Simulator可以进行通信以进行测试

    我想为现有的iOS应用创建一个手表应用.但我处于一种情况,我没有苹果手表,我现有的iOS应用程序只能在不在模拟器上的真实设备上运行.是否可以在iPhone设备上运行应用程序并在手表模拟器中测试我的手表应用程序?解决方法至少在目前,不可能配对真正的iPhone和Watch模拟器.我得出这个结论有三个原因:>Watch模拟器在安装过程中自动与iPhone模拟器配对.>根本无法从界面取消配对Watch模拟器.>在模拟器上无法访问蓝牙以与真实设备进行通信.这是一个proof.

  5. xcode – Cordova plugin.xml添加“Header Search Paths”条目

    我希望将Cordova插件添加到Xcode项目后,在“HeaderSearchPaths”下添加一个新条目.如何在Cordovaplugin.xml文件中进行配置?

  6. ios – 如何使用iphone使用蓝牙或wifi与OBD II进行通信

    我想为iOS创建一个简单的应用程序,它通过ODBIIWifi/蓝牙设备从汽车读取数据并在iPhone屏幕上显示.但我不知道从哪里开始.请有人帮我实现以下结果.我有蓝牙和wifi加密狗.第1步:配对蓝牙或Wifi加密狗和iPhone.第2步:通过加密狗阅读详细信息请参阅我能够轻松理解的任何教程或示例代码.我想深入了解这些过程,并希望自己编写代码.所以请帮忙.提前致谢.解决方法正如David所说,在i

  7. ios – Arduino和iPhone与蓝牙3.0的连接

    我想构建一个需要蓝牙连接的应用程序.蓝牙HC05模块连接到Arduino.我想知道构建可连接到此蓝牙模块的应用程序所需的框架.仍然不知道如何开始.有人可以帮忙吗?

  8. ios – 有关多个连接/提要/视图的XML解析的设计/实现建议

    >我应该在每个视图中都有解析器类/对象或解析XML提要吗?

  9. 可以通过iOS中的蓝牙PAN与系留设备进行通信

    我有一个设备,我通过蓝牙从iOS设备分享我的连接.我想知道是否可以访问在PAN网络上的iPhone上创建服务器并从设备访问它或在设备上创建服务器并从iPhone访问它.有没有人有这种经历?

  10. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

随机推荐

  1. delphi – 主窗口按进程名称处理

    DelphiXe,Win7x64如何从进程名称(exe文件的完整路径)获取主窗口句柄,或至少一个类或窗口名称(如果该进程只有一个窗口).例:解决方法我同意Petesh的说法,你需要枚举顶级窗口并检查创建它的进程的模块文件名.为了帮助您开始枚举顶级窗口,这是一个delphi实现.首先,当你回调给你时,你需要一些与EnumWindows方法通信的方式.为此声明一条记录,该记录将保存您要查找的模块的文件

  2. 如何在Delphi中纯粹通过RTTI信息(即不使用任何实际对象实例)获取TObjectList的子项类型?

    我正在使用RTTI实现用于流式传输任意Delphi对象的通用代码,并且为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获得TObjectList的子项类型<T>不使用任何实际对象实例的字段.要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我将不会有任何实例在加载完成之前完全可用–我宁愿只能访问相关类的纯RTTI数据.我希望能

  3. inno-setup – Inno Setup – 安装程序背景图片

    图像作为安装程序背景如何用inno5.5.9做到这一点?

  4. inno-setup – Inno Setup – 如何添加多个arc文件进行解压缩?

    使用InnoSetup解压缩弧文件.我希望有可能解压缩多个arc文件以从组件选择中安装文件(例如).但仍然显示所有提取的整体进度条.这可能吗?的回答的修改预备是相同的,参考其他答案.在ExtractArc中,为要提取的每个存档调用AddArchive.

  5. delphi – 如何在DataSet的帮助下在TAdvStringGrid中显示数据库中的BLOB图像

    解决方法CreateBlobStream正在创建一个TStream对象,而不是TMemoryStream.由于您不想将JPG写入数据库,因此应使用bmRead而不是bmReadWrite.我不习惯sqlite,但你必须确保使用合适的二进制日期类型.为了确保存储的图像真的是JPG,您应该编写JPG以进行测试,例如:

  6. inno-setup – 在Inno Setup的Code部分下载程序后运行程序

    如何运行我通过Internet下载的应用程序,在代码部分中使用,并等待该应用程序完成运行.我有,使用InnoTools下载程序,下载这两个文件,我想,在第二个完成下载后运行该下载,或jdk-8u111-windows-x64.exe,然后继续安装.解决方法使用其他下载插件,而不是ITD(请参阅下面的原因).例如,InnoDownloadPlugin.当您包含idp.iss时,它定义了一个全局IDP

  7. progress-bar – Inno Setup Run部分的简单进度页面

    我的安装程序非常简单,它基本上是:>欢迎页面>进展页面>最终页面欢迎页面和最终页面是标准页面.在Progress页面,我正在静默安装一堆其他程序.实际的脚本是在[Run]部分中安装每个程序.问题是酒吧达到100%然后停留在那里.我只能更改消息文本.我想要实现的是使用Pascal脚本显示进度,例如:这样我就可以显示更准确的进度条.这就是我所拥有的:问题是,当我构建安装程序时,它不显示欢迎页面.我做错了什么?

  8. delphi – 如何使“显示/隐藏桌面图标”设置生效?

    下面的代码调用SHGetSetSettings函数来隐藏桌面图标但它只是从视图菜单中取消选中“显示桌面图标”.我打电话给SHChangeNotify;更新桌面,但这不起作用?解决方法isa,要刷新桌面,您可以将F5键发送到progman窗口隐藏桌面图标的另一种方法是再次显示

  9. inno-setup – Inno Setup – 避免显示子安装程序的文件名

    我试图使用InnoSetup–Howtohidecertainfilenameswhileinstalling?(FilenameLabel)的想法Theonlysuresolutionistoavoidinstallingthefiles,youdonotwanttoshow,usingthe[Files]section.Installthemusingacodeinstead.UsetheEx

  10. inno-setup – Inno Setup磁力链接下载实施

    我目前正在使用InnoDownloadPlugin为我的安装程序下载文件,这个问题最大的问题是faila正确下载文件.因为连接不良等诸多原因.我想添加一种替代方法来下载文件,因此用户可以选择是否需要常规方式或torrent方式.我知道我可以使用aria2c.exe应用程序(https://aria2.github.io/),有人可以帮我实现它的inno设置代码吗?我需要的是使用torrent(ar

返回
顶部