![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TService, TThread и запись в файл. [D7, XP]
grisme © (2010-10-09 16:12:00)доброго времени суток, уважаемые мастера. столкнулся с проблемой:
есть служба (TService). при инициализации(ServiceStart), создаётся объект TThread.
далее, в ServiceExecute идёт простая обработка событий от диспетчера служб. а объект TThread выполняет работу, до вызова ServiceStop (где останавливается и уничтожается). это всё для примерного понимания "модели" приложения.
Проблема в том, что из TThread.OnExecute делаю попытки записи в файл.
var
x : Cardinal;
t : TextFile;
begin
AssignFile(t, 'thread.log');
Rewrite(t);
x := 0;
Writeln(t, 'x = ', x);
while not Self.Terminated do Inc(x);
Writeln(t, 'Thread stopped, x = ', x);
CloseFile(t);
end;
по логике, сразу после старта службы, в файле thread.log должна появиться записьx = 0.
но записи появляются только после завершения службы (и - получается - остановки нити). причём, обе сразу:
x = 0.
Thread stopped, x = <насуммированное значение>
т.к. в конце, x явно больше нуля, получается, что нить вполне нормально работала.
но почему же не производилась запись в файл?
grisme (2010-10-09 16:58:00) [1]MBo © (09.10.10 16:50) [1]
Спасибо, за разъяснение! :)
MBo (2010-10-09 16:50:00) [2]Запись производится при закрытии файла и при достижении буфером некоего размера. Принудительная запись - Flush(file), если такая функция есть для текстовых файлов