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

Вниз

TList не потоко-безопасный класс?   Найти похожие ветки 

 
Piter ©   (2005-09-17 21:33) [0]

Вот какой глюк - если TList создавать в основном потоке, а записи добавлять в доп. потоках, то вылазят EAccessViolation... но с чего бы это? Доступ синхронизирую...

На примере:

 TPluginList = class
 private
   FList: TList;
   FCriticalSection: TCriticalSection;
 public
   constructor Create;
   destructor Destroy; override;
   procedure AddPlugin(ThreadId: Cardinal);
   procedure DeletePlugin(ThreadId: Cardinal);
   function ExistPlugin(ThreadId: Cardinal): boolean;
 end;

......

{*************** TPluginList ***************}

constructor TPluginList.Create;
begin
 Inherited;
 FCriticalSection := TCriticalSection.Create ;
end;

procedure TPluginList.AddPlugin(ThreadId: Cardinal);
begin
 FCriticalSection.Enter ;
 try
   if not ExistPlugin(ThreadId) then
     FList.Add(Pointer(ThreadId));
 finally
   FCriticalSection.Leave ;
 end;
end;

procedure TPluginList.DeletePlugin(ThreadId: Cardinal);
var
 i: integer;
begin
 FCriticalSection.Enter ;
 try
   i := FList.IndexOf(Pointer(ThreadId));
   if i>=0 then
     FList.Delete(i);
 finally
   FCriticalSection.Leave ;
 end;
end;

function TPluginList.ExistPlugin(ThreadId: Cardinal): boolean;
begin
 FCriticalSection.Enter ;
 try
   Result := FList.IndexOf(Pointer(ThreadId)) >= 0;
 finally
   FCriticalSection.Leave ;
 end;
end;

destructor TPluginList.Destroy;
begin
 FreeAndNil(FCriticalSection);
 inherited;
end;


Вроде по структуре TList это базовый класс, ничего за собой не тянет... почему же ошибки лезут...


 
Sergey_Masloff   (2005-09-17 22:21) [1]

Естественно не потокобезопасный.  См.
TThreadList represents a thread-safe list.


 
Piter ©   (2005-09-17 23:03) [2]

Нда... на свалку мне пора... ошибка в том, что я не создаю экземпляр FList :( Как я так лохануться мог...

Sergey_Masloff   (17.09.05 22:21) [1]
Естественно не потокобезопасный


ну понятно, но я ведь синхронизирую доступ, фактически сделал маленький аналог TThreadList. За подсказку спасибо - я и не знал о таком классе, тогда не буду изобретать велосипед...


 
Sergey_Masloff   (2005-09-17 23:36) [3]

Piter ©   (17.09.05 23:03) [2]
Дя я код потом уже прочел ;-) Ответил фактически на заголовок.



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

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

Наверх




Память: 0.47 MB
Время: 0.043 c
1-1126849785
john_mag
2005-09-16 09:49
2005.10.09
Rave Reports, QuickReport или MSWord, MSExcel?№1


1-1127272192
КиТаЯц
2005-09-21 07:09
2005.10.09
Отключить сообщение Debugger EConvertError


1-1127128666
freshman
2005-09-19 15:17
2005.10.09
преобразование данных


2-1125320467
PIF
2005-08-29 17:01
2005.10.09
Целое число или нет


14-1126938338
Yura32
2005-09-17 10:25
2005.10.09
SRO4NO NUJNA POMOSH