![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Блокировка потоков
tonich © (2009-08-30 18:31:00)День добрый..
такой вопрос...
есть логгер который пишет в файл... (классик). внутри класса объявлена критическая секция...
есть приложение, которое из основного потока пишет в фаил, а так же открывает еще одни поток из которого так же пишется логи в фаил, и иногда происходит блокировка основного потока, ну просто приложение виснит, а почему не могу понять...??
дополнительно поток работает с таймаутами, то есть если он и блокирует доступ к файлу (в логере , то не надолго )
turbouser (2009-08-30 20:44:00) [1]
> tonich (30.08.09 19:52) [4]
Поздравляю.
tonich (2009-08-30 19:52:00) [2]
> Юрий Зотов © (30.08.09 18:53) [1]
спасибо за помощь.. )) таки нашел...
tonich (2009-08-30 19:10:00) [3]если я что-то не правильно понимаю, поправьте меня...
tonich (2009-08-30 19:08:00) [4]))
весело
вот кусок класса логгера
procedure TLog.Log(const Sender: TObject; const LogClass: TLogClass; const LogMsg: String);
var S : String;
begin
try
FCritSection.Enter;
try
... тут происходит запись сообщения в фаил
finally
FCritSection.Leave;
end;
end;
это участок вызывается как в основном так и в дополнительном потоке...
сама секция объявлена в классе логгера
сам логгер создается в основном потоке как глобальная переменная
initialization
FLogProgramm := TLog.Create(nil);
FLogProgramm.LogFileName := GetLogFilePath;
LogDebug('<============S T A R T============>');
LogDebug('initialization global unit');
finalization
LogDebug('finalization global unit');
LogDebug('<============= E N D =============>');
if Assigned(FLogProgramm) then
FreeAndNil(FLogProgramm);
ну то то есть насколько я понимаю работу критических секций, то должно происходить примерно следующее..
если дополнительный поток пишет в фаил, то основной приостанавливается (если он конечно так же пытается писать в фаил) до тех пор пока дополнительный не освободит секцию..
Юрий Зотов (2009-08-30 18:53:00) [5]> tonich (30.08.09 18:31)
У меня тоже программа виснет. Не подскажете, почему?