为何我的D7在运行的时候总是要弹出CPU调试窗口(连Mysql),而在连mssql的时候就不弹出呢? ( 积分: 50 )

  • 主题发起人 主题发起人 行到水穷处
  • 开始时间 开始时间

行到水穷处

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函数执行完毕后
 
补充一下:
弹出CPU调试窗口是在线程结束的时候发生的。
不清楚为什么会这样,在连接SqlServer的时候,没有这个现象发生。
 
线程这么销毁的?Free?把代码贴出来看看
 
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函数执行完毕后
 
后退
顶部