Приветствую,
ОБЯЗАТЕЛЬНО нужно вызывать TCriticalSection->Enter() именно ВНУТРИ потока ПЕРЕД вызовом функции, для которой и нужна критическая секция ?
Или TCriticalSection->Enter() можно вставить в начало вызываемой функции ?
У меня такая ситуация: есть много потоков, всем им передается указатель на класс TDNSCache, функции которого нужно вызывать через критические секции. Класс TDNSCache в качестве члена содержит TCriticalSection, которая создается в конструкторе, и далее используется при вызове всех функций TDNSCache.
Могу я написать так:
//------------------------
class TDNSCache {
public :
GetCachedRecord(AnsiString Domain,TStringList *Resluts);
private:
TCriticalSection *DNSCacheCritical;
};
//------------------------
void __fastcall TDNSCache::GetCachedRecord(AnsiString Domain,TStringList *Resluts)
{
DNSCacheCritical->Enter();
bla bla bla
DNSCacheCritical->Leave();
}
//-------------------------
void __fastcall TMyTThreadDescedant::Execute()
{
TStringList *QueryResult=new TStringList;
DNSCache->GetCachedRecord(Domain,QueryResult); // указатель на TDNSCache передается в конструкторе потока.
}
или нужно убрать TCriticalSection из класса TDNSCache, объявить ее как глобальную переменную и делать так:
void __fastcall TMyTThreadDescedant::Execute()
{
TStringList *QueryResult=new TStringList;
DNSCacheCritical->Enter();
DNSCache->GetCachedRecord(Domain,QueryResult);
DNSCacheCritical->Leave();
}
Помогите плз ! У рихтера как-то мутно по этому поводу написано... Не понятно можно делать как в первом варианте
или нет.... ?
Здравствуйте, Softwarer, Вы писали:
S>Не вижу разницы между этими вариантами.
Ну, есть разница. Экономим стек и пару инструкций входа-выхода.
Теоретически и практически тело, обрамлённое в критическую секцию должно быть как можно более кратким, но не в ущерб функциональности.
... << RSDN@Home 1.1.4 beta 3 rev. 240 silent >>
Здравствуйте, akasoft, Вы писали:
S>>Не вижу разницы между этими вариантами.
A>Ну, есть разница. Экономим стек и пару инструкций входа-выхода.
Согласен, лучше было бы сказать "не вижу принципиальной разницы"