thread.waitfor();这个方法怎么用啊?(10分)

  • 主题发起人 主题发起人 yaya_delphi
  • 开始时间 开始时间
Y

yaya_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的的程序中这样写的:
var
mythread:thread;
begin
mythread:=thread.create(false);
mythread.waitfor();//报错显示无效的句摈,怎么回事呢?
end;
 
把线程实现的代码贴出来好了!!
 
错误在线程体中.
 
constructor fythread.create(bl:boolean);// 创建线程
begin
inherited create(bl);
freeonterminate:=true;
// 线程终止时自动删除对象,
end;

procedure fythread.Execute;
begin
Fmts_lzh_cost_norm.get_cost_norm_fy(com_conn_str,'001',false,true,'',Form_hyq_cost_norm.current_location,
succeed,Form_hyq_cost_norm.cost_norm_eof,fail_info,vdatas);//这句是从MTS组件获得数据库的数据
synchronize(mymethoad);
end;

procedure fythread.mymethoad;
begin
if succeed then
begin
Form_hyq_cost_norm.cds_cost_norm.AppendData(vdatas,not Form_hyq_cost_norm.cost_norm_eof);//装入记录集
end
else
messagedlg(fail_info,mtinformation,[mbok],0);
showmessage('wo ai ni');//测试用的

end;
//单步到此就出错了,说是无效句宾
 
当一个线程应该等待另外一个线程结束的时候,可以调用WartFor方法。。。。
对象.WaitFor语句,就是在当前执行体(线程),等待该对象的执行完毕。。
 
对了 我想起来了 在线程中似乎不能用 showmessage ?
 
问了别人 , 他说出了 其中的原因 , 关键在这里 :
freeonterminate:=true;
// 线程终止时自动删除对象
 
线程运行同步
当线程创建并运行时,需要操作窗体时,必须使用同步synchronize(mymethoad);
在线程过程操作窗体,要指明对象的所属,Form1.Edit1.text:='***';
建议多看看相关材料
线程等待问题
waitfor()应该是线程执行时,需要等待WaiteFor中所等待的过程运行完毕才得以进行
mythread.waitfor()
这句不应该放这
waitfor()过程应该放在线程的Execute里边
 
后退
顶部