行
行到水穷处
Unregistered / Unconfirmed
GUEST, unregistred user!
很奇怪。
另外还有个奇怪的现象
就是自定义线程的ThreadDone(Sender: Object)在线程销毁的时候调用出现奇怪问题。
正常的应该是在线程销毁的时候才调用这个ThreadDone,但是我发现在线程没有销毁的时候
这个ThreadDone也会调用,而且我把每次调用时候的Sender打印出来(用Integer,内存地址)与线程Create的时候的Sender作比较,发现有的是相同的,有的是不同的。太奇怪了。
老大你有没有发现这个问题??????
补充一下:
弹出CPU调试窗口是在线程结束的时候发生的。
不清楚为什么会这样,在连接SqlServer的时候,没有这个现象发生。
constructor TCollectIpListThread.Create(sStartIpC,sEndIpC,sPcName:string);
begin
inherited Create(False);
FreeOnTerminate := True;
OnTerminate := ThreadDone;
end;
var
_Index: Integer;
begin
_Index :=GCollectIpThreadList.IndexOfObject(self);
if (GCollectIpThreadList.Count > 0) and (_Index <> -1) and Terminated then
GCollectIpThreadList.Delete(_Index);
end;
//----下面是创建
function StartCollect: Boolean;
var
BTSTARTCollectIpListThread: TCollectIpListThread;
tempThreadName:string;
begin
if GCollectIpThreadList.Count > 0 then
begin
Result := False;
Exit;
end;
BTSTARTCollectIpListThread := TCollectIpListThread.Create(GStartIPC,GEndIPC,GPCName);
tempThreadName := IntToStr(Integer(BTSTARTCollectIpListThread));
GCollectIpThreadList.AddObject(tempThreadName,BTSTARTCollectIpListThread);
Result := True;
end;
销毁是自动销毁的,在其Execute函数执行完毕后
另外还有个奇怪的现象
就是自定义线程的ThreadDone(Sender: Object)在线程销毁的时候调用出现奇怪问题。
正常的应该是在线程销毁的时候才调用这个ThreadDone,但是我发现在线程没有销毁的时候
这个ThreadDone也会调用,而且我把每次调用时候的Sender打印出来(用Integer,内存地址)与线程Create的时候的Sender作比较,发现有的是相同的,有的是不同的。太奇怪了。
老大你有没有发现这个问题??????
补充一下:
弹出CPU调试窗口是在线程结束的时候发生的。
不清楚为什么会这样,在连接SqlServer的时候,没有这个现象发生。
constructor TCollectIpListThread.Create(sStartIpC,sEndIpC,sPcName:string);
begin
inherited Create(False);
FreeOnTerminate := True;
OnTerminate := ThreadDone;
end;
var
_Index: Integer;
begin
_Index :=GCollectIpThreadList.IndexOfObject(self);
if (GCollectIpThreadList.Count > 0) and (_Index <> -1) and Terminated then
GCollectIpThreadList.Delete(_Index);
end;
//----下面是创建
function StartCollect: Boolean;
var
BTSTARTCollectIpListThread: TCollectIpListThread;
tempThreadName:string;
begin
if GCollectIpThreadList.Count > 0 then
begin
Result := False;
Exit;
end;
BTSTARTCollectIpListThread := TCollectIpListThread.Create(GStartIPC,GEndIPC,GPCName);
tempThreadName := IntToStr(Integer(BTSTARTCollectIpListThread));
GCollectIpThreadList.AddObject(tempThreadName,BTSTARTCollectIpListThread);
Result := True;
end;
销毁是自动销毁的,在其Execute函数执行完毕后