Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.019 c
14-1127143768
ArtemESC
2005-09-19 19:29
2005.10.09
Машина Тьюринга


14-1126713394
lookin
2005-09-14 19:56
2005.10.09
Кажется, я уже полностью потерял нить идеи компонентосоздания...


3-1125383855
rentgen
2005-08-30 10:37
2005.10.09
Как очистить базу MDB?


8-1112417822
Galiaf
2005-04-02 08:57
2005.10.09
Звуки в Delphi


14-1126176680
dr Tr0jan
2005-09-08 14:51
2005.10.09
Расписание авиарейсов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский