加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用Delphi管理来自EXE的多个实例的XML文件的并发输入/输出

发布时间:2020-12-15 04:11:54 所属栏目:大数据 来源:网络整理
导读:我有一个用Delphi编写的命令行工具,其工作是在 XML文件中插入一个节点,然后立即退出.我需要使工具的几个实例同时执行,并将节点插入到同一个XML中. 为了实现这个目的,我引入了一个简单的文件“mutex” – 该工具在写入XML之前创建一个临时文件,然后在完成witi
我有一个用Delphi编写的命令行工具,其工作是在 XML文件中插入一个节点,然后立即退出.我需要使工具的几个实例同时执行,并将节点插入到同一个XML中.

为了实现这个目的,我引入了一个简单的文件“mutex” – 该工具在写入XML之前创建一个临时文件,然后在完成witing之后删除临时文件.因此,如果执行另一个实例,它会检查是否存在此临时文件,并等待它被删除.然后它再次创建临时文件,写入XML并删除临时文件.

问题是只有当2-3个实例尝试同时写入XML文件时才能正常工作.当有更多实例时 – 其中一些实例只是永远等待,并且永远不会将节点附加到XML中.

是否有更好的方法可以使大量实例同时运行并写入XML?

解决方法

命名信号量或互斥量可以在一台机器上为您执行此操作.使用例如来自SyncObjs的TMutex,并使用其中一个带名称参数的构造函数.如果在所有应用程序中使用相同的名称,它们将在同一内核互斥锁上进行同步.使用TMutex.Acquire访问,并使用TMutex.完成后,请在try / finally块中保护.

使用具有InitialOwner参数的TMutex.Create重载,但为此指定False(当然,除非您想立即获取互斥锁).此重载在后台调用CreateMutex.查看SyncObjs的源代码和CreateMutex的文档以获取更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读