为什么无法结束这个子线程?

euler_16 2007-04-09 10:13:14
为什么无法结束这个子线程?似乎是回调函数的问题,把回调函数去掉就没有问题了.
type
TCCDThread = class(TThread)
private
HHV: HWND;

protected
procedure Execute; override;
public
constructor Create(aFlag: boolean);
destructor Destroy; override;
end;

一个全局回调函数
function aSnapCallBack(pInfo: PHV_SNAP_INFO): integer;
begin
//进行图象转换和保存为JPEG格式的操作
end;

constructor TCCDThread.Create(aFlag: boolean);

begin
//设置CCD的操作

Inherited Create(aFlag);
end;

destructor TCCDThread.Destroy;
begin
//停止CCD采集和释放资源

inherited;
end;

procedure TCCDThread.Execute;
begin
FreeOnTerminate:=True;

//设置回调函数
HVOpenSnap(HHV,aSnapCallBack,aPointer);
//开始CCD采集
HVStartSnap(HHV,ppBuff,1);

while not Terminated do
begin
sleep(1000);
end;
end;

//线程运行后能正常的显示和保存图象,但在主线程中使用
CCDThread.Suspend;
CCDThread.Terminate;
不能停止线程



...全文
250 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyz 2007-04-10
  • 打赏
  • 举报
回复
会不会在这个函数里成死循环了?

HVStartSnap(HHV,ppBuff,1);
euler_16 2007-04-10
  • 打赏
  • 举报
回复
解决了,我太愚蠢了,结束线程时居然先把线程挂起,就永远也结束不了了
euler_16 2007-04-10
  • 打赏
  • 举报
回复
确实是这个函数的问题,启动它以后,CCD就不断的采集图象,调用回调函数,这个子线程似乎就进入死循环了。
但问题是要使CCD连续的采集图象就必须先用这个函数,同时也需要将这些操作放在子线程中进行,有没有什么解决办法?????

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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