这样做可以释放线程对象吗?

thermometer 2002-03-19 04:40:53
unit SnapThread;

interface

uses
Classes, Windows;

type
TSnapThread = class(TThread)
private
{ Private declarations }
m_hcg: LongWord;
m_hWnd: LongWord;
m_DC: LongWord;
m_x,m_y,m_width,m_height:LongWord;

m_nBufSize:LongWord;
m_Buf:Pchar;
protected
procedure Execute; override;
public
constructor Create(hcg:LongWord; hwnd:LongWord;
x,y,width,height:LongWord);
procedure Free;//这样声明可以吗?
end;

implementation

constructor TSnapThread.Create(hcg, hWnd: LongWord; x, y, width, height: LongWord);
begin
m_hcg := hcg;
m_hWnd := hWnd;
m_DC:= GetDC(m_hWnd);
m_x:=x;
m_y:=y;
m_width :=width;
m_height :=height;
m_nBufSize := m_width*m_height*3;
GetMem(m_Buf, m_nBufSize);

self.FreeOnTerminate:=False;
inherited Create(True);
end;

procedure TSnapThread.Free;
begin
ReleaseDC(m_hWnd, m_DC);
FreeMem(m_Buf, m_nBufSize);
inherited Free;
end;

然后再主程序中这样建立和释放,可以吗?
var
m_SnapThread :TSnapThread;
begin
m_SnapThread := TSnapThread.Create(m_hcg, self.Handle, 4, 4, 100, 100);
。。。。。
。。。。。
m_SnapThread.Free;
end;
...全文
23 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
chechy 2002-03-19
  • 打赏
  • 举报
回复
不是这样,应该是:
TSnapThread = class(TThread)
private
{ Private declarations }
m_hcg: LongWord;
m_hWnd: LongWord;
m_DC: LongWord;
m_x,m_y,m_width,m_height:LongWord;

m_nBufSize:LongWord;
m_Buf:Pchar;
protected
procedure Execute; override;
public
constructor Create(hcg:LongWord; hwnd:LongWord;
x,y,width,height:LongWord);
destructor Destroy; override;
end;

destructor TSnapThread.Destroy;
begin
ReleaseDC(m_hWnd, m_DC);
FreeMem(m_Buf, m_nBufSize);
inherited Destroy;
end;

然后再主程序中可以这样建立和释放,
var
m_SnapThread :TSnapThread;
begin
m_SnapThread := TSnapThread.Create(m_hcg, self.Handle, 4, 4, 100, 100);
。。。。。
。。。。。
m_SnapThread.Free;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧