Форум: "Основная";
Текущий архив: 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