问题
Sometimes this function locks my program, and it's freezes until i close it. What is wrong here ?
function del_from_list(id:string):boolean;
var i : integer;
begin
Result := True;
try
with global_list.LockList do
begin
for i:=0 to Count-1 do
begin
if Tthread_list(Items[i]).id = id then
begin
Delete(i);
break;
end;
end;
end;
finally
global_list.UnlockList;
end;
end;
the class
Tthread_list = class
public
id : string;
constructor Create(const id: string);
end;
I'm adding to the list like that:
global_list.Add(Tthread_list.Create('xxx'));
global list is a global variable
var global_list : TThreadList = nil;
回答1:
You need to call LockList()
outside of the try
block instead of inside of it, eg:
function del_from_list(const id: string): boolean;
var
List: TList;
i : integer;
begin
Result := False;
List := global_list.LockList;
try
with List do
begin
for i :=0 to Count-1 do
begin
if Tthread_list(Items[i]).id = id then
begin
Delete(i);
Result := True;
break;
end;
end;
end;
finally
global_list.UnlockList;
end;
end;
回答2:
for loop counts in the wrong direction. When deleting members, you MUST count down, not up.
来源:https://stackoverflow.com/questions/8542260/delphi-tthreadlist-sometimes-lock-program