用户正在收到间歇性错误"无法创建文件"C:...\Filename.ini".无法对打开了用户映射部分的文件执行请求的操作."
我无法找到有关此错误的更多信息,这有助于了解正在发生的事情.
TMemIniFile是线程安全的吗?
据我所知TMemIniFile(和任何其他TCustomIniFile后代)不是线程安全的.您需要将其包装到关键部分.
在这个链接中你可以找到一个线程安全的TCustomIniFile的实现(理论上由TeamB的Peter Below编程,虽然我不能保证).
还有约TMemIniFile的线程安全的英巴卡迪诺论坛的讨论在这里.他们谈论组件的C++版本.
您还可以找到在MSDN关于您的错误消息的来源的讨论在这里.它有点长,但一般的结论是有2个exes试图访问同一个文件.您可以在此处找到有关此主题的其他讨论.
首先,我假设导致报告问题的特定线程配置是有多个TMemIniFile实例,甚至可能在不同的进程中,同时从不同的线程保存.
TMemIniFile不是线程安全的.为了避免任何竞争条件,您需要编写(伪)代码,如下所示:
AcquireLock;
Try
ReadMemIniFileFromDisk;
ModifyMemIniFileInMemory;
WriteMemIniFileToDisk;
Finally
ReleaseLock;
End;
Run Code Online (Sandbox Code Playgroud)
仅仅锁定文件操作是不够的,因为那样你可能会因为比赛而失去更改.您必须锁定整个读/修改/写周期.