![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TList не потоко-безопасный класс?
Piter © (2005-09-17 21:33:00)Вот какой глюк - если 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 23:36:00) [1]Piter © (17.09.05 23:03) [2]
Дя я код потом уже прочел ;-) Ответил фактически на заголовок.
Piter (2005-09-17 23:03:00) [2]Нда... на свалку мне пора... ошибка в том, что я не создаю экземпляр FList :( Как я так лохануться мог...
Sergey_Masloff (17.09.05 22:21) [1]
Естественно не потокобезопасный
ну понятно, но я ведь синхронизирую доступ, фактически сделал маленький аналог TThreadList. За подсказку спасибо - я и не знал о таком классе, тогда не буду изобретать велосипед...
Sergey_Masloff (2005-09-17 22:21:00) [3]Естественно не потокобезопасный. См.
TThreadList represents a thread-safe list.