DELPHI的线程使用问题!!!!!!!!!!!!!!! 我的问题是:我新建了一个线程newthread, 在窗体上我有两个按钮,一个是使newthread创建并运行线程中的代码;另一个按钮能终止线程并执行其他一段代码,我用newthread.terminate来终止线程,但还是会执行线程中的代码这是为什么啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为线程和Application的terminate都不是立即结束,而只是设置Terminated标记。你应该。在线程的Execute中执行时判断Terminated,如果是True则不要执行了。————————————————————————————————————宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。———————————————————————————————————— 看Delphi的使用帮助,NewThread.Terminate过程只是将线程的Terminated属性设置为True,随后线程会定时地检查这个属性,发现它为True时就去结束自己!所以你创建了NewThread时她会先去执行代码(因为你不可能一开始就将Terminated设置为True,如果你这样做,也就刚被创建就会被杀死!),当你又调用NewThread.Terminat设置她的属性时,已经有代码被执行了! 我也遇到过这样的问题,当线程在执行时,用另外一个按钮来执行NewThread.Terminat似乎不行,因为在另外一个过程中NewThread似乎不能调用Terminat属性。期待高手。 在线程反复执行的地方不断检测ternimated,如果 true 则推出 我在线程的Execute中是这样写的:procedure autocheckThread.Execute;begin { Place thread code here } freeonterminate:=true; while not terminated do begin synchronize(autocheck);//autocheck是我具体执行一段代码的函数 end;end;我是在不断检测terminated 属性的啊,但终止线程还是会执行线程中的代码啊? freeonterminate:=true;不要这个,如果你要强制结束的话,否则就不要放在这里 看来你的 autocheck 有问题啊,它可能根本不能返回 线程的Execute中,if Terminated then exit; 嗯,同意楼上的观点,估计你的autocheck返回不了 建议你在synchronize(autocheck);//autocheck是我具体执行一段代码的函数加一个中断看看 up..在线程的Execute中,if Terminated then exit; blazingfire 来回答问题拿分吧 delphi制作flash播放器的问题 TUpdateSQL组件怎么绑定参数? 应朋友要求,帮忙发布一个消息。12000做个项目。顶的给分! 如何知道某个空间是否存在Items.Strings的属性 ? 求救(关于存储过程) 表格显示问题? 在網上下一段程式,關於郵件特快專遞的,貼出來,為什麼在win2000裡可以,在win98就不行呢? 如何解决选择字段打印的问题? 俏佳人魂牵何处...... 有没有好点的专讲DELPHI的类的教程啊? 用idsmtp,作邮件发送的出了如下错误,我是按照delphi自带的demo做的。。。
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
procedure autocheckThread.Execute;
begin
{ Place thread code here }
freeonterminate:=true;
while not terminated do
begin
synchronize(autocheck);//autocheck是我具体执行一段代码的函数
end;
end;
我是在不断检测terminated 属性的啊,但终止线程还是会执行线程中的代码啊?
加一个中断看看