Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизПотокобезопасный класс Найти похожие ветки
← →
Fktrc © (2004-11-25 06:09) [0]Реализую сабж следующим образом:
TSafeThread = class
private
fCriticalSection: TRTLCriticalSection;
fField1: Integer;
fField2: String;
fField3: TextFile;
function GetField1: Integer;
procedure SetField1 (NewField: Integer);
function GetField2: String;
procedure SetField2 (const NewField: String);
public
property Field1: Integer read GetField1 write SetField1;
property Field2: String read GetField2 write SetField2;
procedure Method1;
function Method2;
constructor Create ();
destructor Destroy; override;
end; {TSafeThread}
причем
1. в public секции только свойства и методы (никаких переменных)
2. тела абсолютно всех методов класса реализованы вот так:
begin
EnterCriticalSection (fCriticalSection);
try
bla;
bla;
finally
LeaveCriticalSection (fCriticalSection);
end;
end;
Имеют ли Мастера что-л сказать? Действительно ли такой класс (объект которого создается в одном потоке и используется всеми остальными) будет потокобезопасным или я что-то упустил?
← →
Digitman © (2004-11-25 08:01) [1]
> или я что-то упустил?
не забудь и про использование КС в деструкторе, это ведь тоже метод
EnterCriticalSection (fCriticalSection);
try
...
inherited;
finally
LeaveCriticalSection (fCriticalSection);
DeleteCriticalSection (fCriticalSection);
end;
← →
Fktrc © (2004-11-25 08:28) [2]OK, спасибо. Упустил из виду.
← →
SVM (Perm) (2004-11-25 09:45) [3]CriticalSection - одна для всеx экземпляров.
← →
Fktrc © (2004-11-25 12:51) [4]2SVM (Perm)
Почему? Если в конструкторе использовать InitializeCriticalSection(fCriticalSection), то по-моему у каждого экземпляра класса будет своя секция, не пересекающаяся с секциями других экземпляров.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c