- Код: Выделить всё
program StrListFile;
{$mode objfpc}
uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create;
try
Str.LoadFromFile('SomeFile.txt');
Str.Add('Hello');
Str.SaveToFile('SomeFile.txt');
finally
Str.Free;
end;
end.
Сам по себе он работает без вопросов. Но мне нужно его засунуть в функцию библиотеки DLL, которая вызывается неким ПО (Колцентр), работу которого я не контролирую. К моей функции оно предъявляет требования: processor safe, memory safe, thread safe.
В процессе работы Колцентра моя функция вызывается многократно (при поступлении телефонных вызовов), иногда успешно отрабатывает, иногда вызывает сбой (пока не научился как отловить) - спорадически. Теоретически, функция может быть вызвана одновременно из нескольких тредов, попытается писать в один и тот же файл... не знаю, как Windows Server 2012 это разрулит. Но на практике траффик небольшой, вызовы следуют один за другим с интервалом в несколько секунд, и всё равно спорадически происходят сбои.
Заметил, что если вместо SaveToFile использовать старый добрый AssignFile, Append и Writeln - функция отрабатывает 100% успешно. Неужели SaveToFile нарушает какое-то из требований?
Понимаю, что задачка со многими неизвестными...
Подскажите хотя бы, чем и в какую сторону копать?