X
xfeiffer
Unregistered / Unconfirmed
GUEST, unregistred user!
先把我的线程弄出来吧:
线程中用到的结构体
PMsgList=^TMsgList;
//消息机制
TMsgList=record
Style:Integer;
//消息类别:0普通消息;1连接;2断开
Content:Array[0..9999]of Byte;
//消息内容
Length:Integer;
//消息长度
Threadointer;
//Peer的Thread
end;
声明:
TManageMessageThread=class(TThread)
private
procedure HandleMessage;
//一些procedure或者function
public
myMessageMsgList;
myThread:TIdPeerThread;
myQuery:TADOQuery;
constructor Create(AStyle:Boolean;AQuery:TADOQuery;AMessageMsgList);overload;
procedure Execute;
override;
procedure Terminate;
procedure HandleMessage;
end;
以下是实现方法:
构造方法
constructor TManageMessageThread.Create(AStyle:Boolean;AQuery:TADOQuery;AMessageMsgList);
begin
CoInitialize(nil);//线程种要引用ActiveX控件
inherited Create(AStyle);
FreeOnTerminate:=true;//线程执行结束后自动释放
myQuery:=AQuery;
myQuery.Close;
myMessage:=AMessage;
myThread:=AMessage.Thread;//TIdPeerThread
end;
procedure TManageMessageThread.Execute;
begin
Synchronize(HandleMessage);//同步执行线程种的数据处理过程
[red]//WaitFor;
不知道在这个地方用这句话是否可以起到等待线程结束之后才推出临界区[/red]
end;
procedure TManageMessageThread.Terminate;
begin
myQuery.Close;
myQuery.Free;//释放线程中的ADO控件
myThread.Free;
FreeMem(myMessage);//释放指针,传入的AMessage是用GetMem来获取的,所以用FreeMem
CoUnInitialize;//释放ActiveX控件
inherited;
end;
问题:
现在线程执行没有问题,但我觉得线程执行完毕之后释放其占用的内存空间的时候有问题,只需要2天时间必定因为内存不足而死机,我查了N多的资料都说那个FreeOnTerminate:=true;可以释放,但我的为什么不能释放呢?
[red]请各位大侠帮帮忙,谢谢!![/red]
线程中用到的结构体
PMsgList=^TMsgList;
//消息机制
TMsgList=record
Style:Integer;
//消息类别:0普通消息;1连接;2断开
Content:Array[0..9999]of Byte;
//消息内容
Length:Integer;
//消息长度
Threadointer;
//Peer的Thread
end;
声明:
TManageMessageThread=class(TThread)
private
procedure HandleMessage;
//一些procedure或者function
public
myMessageMsgList;
myThread:TIdPeerThread;
myQuery:TADOQuery;
constructor Create(AStyle:Boolean;AQuery:TADOQuery;AMessageMsgList);overload;
procedure Execute;
override;
procedure Terminate;
procedure HandleMessage;
end;
以下是实现方法:
构造方法
constructor TManageMessageThread.Create(AStyle:Boolean;AQuery:TADOQuery;AMessageMsgList);
begin
CoInitialize(nil);//线程种要引用ActiveX控件
inherited Create(AStyle);
FreeOnTerminate:=true;//线程执行结束后自动释放
myQuery:=AQuery;
myQuery.Close;
myMessage:=AMessage;
myThread:=AMessage.Thread;//TIdPeerThread
end;
procedure TManageMessageThread.Execute;
begin
Synchronize(HandleMessage);//同步执行线程种的数据处理过程
[red]//WaitFor;
不知道在这个地方用这句话是否可以起到等待线程结束之后才推出临界区[/red]
end;
procedure TManageMessageThread.Terminate;
begin
myQuery.Close;
myQuery.Free;//释放线程中的ADO控件
myThread.Free;
FreeMem(myMessage);//释放指针,传入的AMessage是用GetMem来获取的,所以用FreeMem
CoUnInitialize;//释放ActiveX控件
inherited;
end;
问题:
现在线程执行没有问题,但我觉得线程执行完毕之后释放其占用的内存空间的时候有问题,只需要2天时间必定因为内存不足而死机,我查了N多的资料都说那个FreeOnTerminate:=true;可以释放,但我的为什么不能释放呢?
[red]请各位大侠帮帮忙,谢谢!![/red]