Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.02;
Скачать: CL | DM;

Вниз

TService, TThread и запись в файл.   Найти похожие ветки 

 
grisme ©   (2010-10-09 16:12) [0]

доброго времени суток, уважаемые мастера. столкнулся с проблемой:
есть служба (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 явно больше нуля, получается, что нить вполне нормально работала.
но почему же не производилась запись в файл?


 
MBo ©   (2010-10-09 16:50) [1]

Запись производится при закрытии файла и при достижении буфером некоего размера. Принудительная запись - Flush(file), если такая функция есть для текстовых файлов


 
grisme ©   (2010-10-09 16:58) [2]

MBo ©   (09.10.10 16:50) [1]

Спасибо, за разъяснение! :)



Страницы: 1 вся ветка

Текущий архив: 2011.01.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.005 c
15-1285119505
0x00FF00
2010-09-22 05:38
2011.01.02
Очень старая реклама МТС


2-1286382969
Илья2
2010-10-06 20:36
2011.01.02
Как завершить работу DLL?


15-1285044372
12
2010-09-21 08:46
2011.01.02
столбец(+) в oracle, что-то не могу найти, google мимо все ходит


6-1232751421
Miho
2009-01-24 01:57
2011.01.02
Проблема в чате на сокетах


11-1227521066
Dy1
2008-11-24 13:04
2011.01.02
юникод