结束不了??? ( 积分: 50 )

赛特

Unregistered / Unconfirmed
GUEST, unregistred user!
我的线程有个双循环:
procedure mmthread.execute()
begin
while not terminateddo
begin
while truedo
begin
..............
end;
end;
end;

my:mmthread;
1.调用my.terminate属性为true停不了线程????
2.用terminate为true停线程就不用再来个my.free了撒????
3.用my.suspend,再my.free后,程序就死起了,按键也按不起了????
 
我的线程有个双循环:
procedure mmthread.execute()
begin
while not terminateddo
begin
while truedo
begin
..............
end;
end;
end;

my:mmthread;
1.调用my.terminate属性为true停不了线程????
2.用terminate为true停线程就不用再来个my.free了撒????
3.用my.suspend,再my.free后,程序就死起了,按键也按不起了????
 
1. while true 是死循环,需要在里面加入 break 或 goto 等跳转语句。
2.设置Thread对象的FreeOnTerminate属性为True才有次效果.
3.一个线程没有结束,一般不要强行Free,会有很多问题。
 
在线程的外面怎样结束?
 
在调用terminate属性为true 后那还要.free才能释放资源哟?
 
我试过了如果线程就是:
while not terminateddo
begin
...............
end;
只是一个循环的话,terminate为true就能正常的结束线程
 
怎么会用while true 这样的语句呢
思路问题
 
那当然,你在一层循环里包一个死循环没意义。
 
是的,死循环了~~~第一次判断没有terminated 后就已经进入
while truedo
死循环了,根本跳不出来
 
我做的毕业设计是个电话语音服务系统。语音卡有两个通道,我的设计是一个通道是一个线程。但我发现用到双循环后,用线程对象的terminate属性为true就停不了了??
我线程是这样的:
while not terminateddo
//最外层循环是一直不停的让它监
begin
//听通道
。。。。。。。。
while truedo
//内层这个循环是判断用户只要不输入#号
begin
//就记录用户的输入(用户输入以#结束)
case tv_getdtmfchar(0) of //该函数返回输入的asc码
48:yonghushuru:=yonghushuru+'1';
49:yonghushuru:=yonghushuru+'2';
................
35:break;
else

end;

end;

end;

1.但在调用该线程对象的terminate为true时就停不了了,我试过的单循环就可以正常的停????
2.用terminate为true停线程就不用再来个 线程对象.free 了撒????
3.用对象.suspend,再对象.free后,程序就死起了,按键也按不起了????
谢谢了!!
 
while truedo
//内层这个循环是判断用户只要不输入#号
begin
//就记录用户的输入(用户输入以#结束)
application.ProcessMessages;//加上这句,不然死定了 :)
case tv_getdtmfchar(0) of //该函数返回输入的asc码
48:yonghushuru:=yonghushuru+'1';
49:yonghushuru:=yonghushuru+'2';
................
35:break;
else

end;

end;

如果加上那句还不行,再把 35:break;改为Exit试试??
 
exit 就跳出这个事件了
 
那在while truedo
的循环体中加上application.ProcessMessages;这句就应该可以了~~~试试吧~~~
 
写具体点呀,我是初学线程
 
我上面已经写了啊,没注意看吧?:)
while truedo

begin

application.ProcessMessages;//加上这句,意思是交主动权给windows
case tv_getdtmfchar(0) of
48:yonghushuru:=yonghushuru+'1';
49:yonghushuru:=yonghushuru+'2';
................
35:break;
else

end;

end;
 
2.用terminate为true停线程就不用再来个my.free了撒????
3.用my.suspend,再my.free后,程序就死起了,按键也按不起了????
 
加了application.ProcessMessages,后在线程里面也是线程对象.terminate属性为true来结束是不是?之后不用再.free了撒????
 
给我你的邮箱嘛,我发个简单的线程双循环来,帮我调试一下,谢谢
 
hongxing_dl724@163.com
我先午休一下下,你先发过来吧。
我用的d7
 
我已经给你发到邮箱了,谢谢!!!
 

Similar threads

S
回复
0
查看
951
SUNSTONE的Delphi笔记
S
D
回复
0
查看
739
DelphiTeacher的专栏
D
S
回复
0
查看
775
SUNSTONE的Delphi笔记
S
D
回复
0
查看
683
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部