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

前端之家收集整理的这篇文章主要介绍了如何使用Delphi管理来自EXE的多个实例的XML文件的并发输入/输出访问.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个用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的文档以获取更多详细信息.

猜你在找的Delphi相关文章