Главная страница
    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.015 c
1-1125501595
Dmitrich
2005-08-31 19:19
2005.10.09
Загрузка потока в Excel


4-1123239731
Tab
2005-08-05 15:02
2005.10.09
Системные имена кнопок


3-1125062670
syte_ser78
2005-08-26 17:24
2005.10.09
Подключение к базе Paradox


5-1102660951
FunkyByte
2004-12-10 09:42
2005.10.09
Как в StringGrid перекрыть InplaceEditor?


2-1125735542
Ксардас
2005-09-03 12:19
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский