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

Вниз

Странное поведение функции TryEnterCriticalSection()   Найти похожие ветки 

 
Th   (2004-09-28 16:15) [0]

Следующий код работает как-то не очень.. Первый раз функция TryEnterCriticalSection() входит в критическую секцию и возвращает true, а вот во второй раз не желает - всегда false, хотя LeaveCriticalSection() вызывается перед вторым разом. EnterCriticalSection() вместо TryEnterCriticalSection() работает нормально.


try
if not TryEnterCriticalSection(SocketCS) then
 raise Exception.Create("Service is busy by another client")
else
 begin
 {...}
 end;
finally
LeaveCriticalSection(SocketCS)
end;


подскажите плз, в чем грабли?


 
Th   (2004-09-28 16:20) [1]

Все, сорри, вопрос снят.


 
Almaz ©   (2004-09-28 16:29) [2]

Обратите внимание на свой код: если TryEnterCriticalSection вернет FALSE то инициируется исключение и в finally будет вызвана LeaveCriticalSection, хотя входа в секцию осуществлено не было. TryEnterCriticalSection возвращает True только если число вызовов EnterCriticalSection и LeaveCriticalSection совпадает. Т.е. если LeaveCriticalSection вызвано без EnterCriticalSection, то TryEnterCriticalSection вернет FALSE. Учтите это при проектировании Вашего приложения и все заработает.
Например приведенный выше код измените на:
if not TryEnterCriticalSection(SocketCS) then
raise Exception.Create("Service is busy by another client")
else
 try
   ...
 finally
   LeaveCriticalSection(SocketCS)
 end;


Удачи.

p.s. Простой пример:

 InitializeCriticalSection(SocketCS);
 LeaveCriticalSection(SocketCS);
 if TryEnterCriticalSection(SocketCS) then
   ShowMessage("True")
 else
   ShowMessage("False");


 
Th   (2004-09-28 16:40) [3]

спасибо, именно это и было - LockCOunt оказывался -2 из-за того, что LeaveCriticalSection дергалась лишний раз в другом месте..



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

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

Наверх




Память: 0.47 MB
Время: 0.032 c
14-1097613020
Ihor Osov'yak
2004-10-13 00:30
2004.10.31
http://www.km.ru/news/ - заслуживает доверия, или желтизна?


14-1097520189
Vulko
2004-10-11 22:43
2004.10.31
Блок схема алгоритма быстрой сортировки...


10-1054713801
OlegL
2003-06-04 12:03
2004.10.31
Методы COM object-а


1-1097668698
Students
2004-10-13 15:58
2004.10.31
Закладка в PageControl


4-1096021148
Antonmm2
2004-09-24 14:19
2004.10.31
Форматирование диска