Y
yinhes
Unregistered / Unconfirmed
GUEST, unregistred user!
我遍了两个线程,ScanThread 和 TestThread
其中
ScanThread .execute
begin
for i:=0 to 255do
begin
if scanIp(i).Status=normal then
AddListItem(ScanIp(i).timeout,i);
end;
end;
而
AddListItem(TimeOut:String,Index:Integer);
begin
EnterCritical(cs);
with Form1.IpList.Adddo
begin
SubItem[Index].Caption:=Index;
SubItem[Index].add(Timeout);
end;
LeaveCriticalSection(cs);
end;
其中
TestThread .execute
begin
for i:=0 to 255do
begin
if scanIp(i).Status=normal then
UpDataListItem(ScanIp(i).timeout,i);
end;
end;
而
UpDataListItem(TimeOut:String,Index:Integer);
begin
EnterCritical(cs);
begin
SubItem[Index].Caption:=Index;
SubItem[Index].add(Timeout);
end;
LeaveCriticalSection(cs);
end;
现在我要加一个函数
ScanStopBtn.OnClick
begin
ScanThread.suspend;
TestThread.resume;
end;
会出现问题:
就是当Onclick事件发生时,ScanThread还未退出临界区既全局变量iplist
的拥有权还归案ScanThread,这样一来 TestThread就不能顺利执行.
其中
ScanThread .execute
begin
for i:=0 to 255do
begin
if scanIp(i).Status=normal then
AddListItem(ScanIp(i).timeout,i);
end;
end;
而
AddListItem(TimeOut:String,Index:Integer);
begin
EnterCritical(cs);
with Form1.IpList.Adddo
begin
SubItem[Index].Caption:=Index;
SubItem[Index].add(Timeout);
end;
LeaveCriticalSection(cs);
end;
其中
TestThread .execute
begin
for i:=0 to 255do
begin
if scanIp(i).Status=normal then
UpDataListItem(ScanIp(i).timeout,i);
end;
end;
而
UpDataListItem(TimeOut:String,Index:Integer);
begin
EnterCritical(cs);
begin
SubItem[Index].Caption:=Index;
SubItem[Index].add(Timeout);
end;
LeaveCriticalSection(cs);
end;
现在我要加一个函数
ScanStopBtn.OnClick
begin
ScanThread.suspend;
TestThread.resume;
end;
会出现问题:
就是当Onclick事件发生时,ScanThread还未退出临界区既全局变量iplist
的拥有权还归案ScanThread,这样一来 TestThread就不能顺利执行.