帮帮忙! ( 积分: 60 )

  • 主题发起人 主题发起人 crasyProg
  • 开始时间 开始时间
C

crasyProg

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用线程向导创建了一个线程类,在线程Destroy时我向主窗体postmessage,可是主窗体捕捉有时能捕捉到消息,有时就莫名其妙的捕捉不到!这是怎么回事呢?DFW帮帮小弟我吧,谢谢了
代码如下:
线程类:
private
myControl:Tcontrol;//控件名称假设的
MyThread.Execute;
begin
try
myControl:=Tcontrol.create(nil);
... //myControl一些属性付值
myControl.timeout=1000;
myControl.do();
myControl.OnSucess=myThreadSucess;
while not terminateddo
application.processmessage;
finally
myControl.free;
end;
end;

destruct Mythread.destroy;
begin
postmessage(fom1.handle,wm_threadMsg,0,0);
inherit;
end;
主窗体代码
主线程Unit1
const
wm_threadMsg=wm_message+100;
procedure wmthreadmsg(msg:Tmsg):messages;wm_threadMsg;
begin
myThread.create()..//再创建一个线程
application.p..
end;

 
我使用线程向导创建了一个线程类,在线程Destroy时我向主窗体postmessage,可是主窗体捕捉有时能捕捉到消息,有时就莫名其妙的捕捉不到!这是怎么回事呢?DFW帮帮小弟我吧,谢谢了
代码如下:
线程类:
private
myControl:Tcontrol;//控件名称假设的
MyThread.Execute;
begin
try
myControl:=Tcontrol.create(nil);
... //myControl一些属性付值
myControl.timeout=1000;
myControl.do();
myControl.OnSucess=myThreadSucess;
while not terminateddo
application.processmessage;
finally
myControl.free;
end;
end;

destruct Mythread.destroy;
begin
postmessage(fom1.handle,wm_threadMsg,0,0);
inherit;
end;
主窗体代码
主线程Unit1
const
wm_threadMsg=wm_message+100;
procedure wmthreadmsg(msg:Tmsg):messages;wm_threadMsg;
begin
myThread.create()..//再创建一个线程
application.p..
end;

 
单步跟踪一下会发现错误的
你很有可能是有时并没执行线程的destroy
 
TO:abookdog
说的很对!是这样的!请教这是为什么呢?能否仔细说明一下!谢谢,分不够可以加的!
 
線程是很難調試,我昨天寫了一個很簡單的都會死鎖,靠
 
DFW们,帮帮小弟我啊,这个问题搞得我很长时间了,谢谢!
 
把发送消息写在Mythread.OnTerminate事件中试试。
 
Mythread.OnTerminate?OnTerminate是TThread的一个属性阿!
 
Mythread.destroy的事件只有在Mythread.free执行时才被调用的。
正确的是在Mythread.OnTerminate事件中处理消息发送机制。
OnTerminate确实是一个属性,但这是一个事件属性,该属性的参数请F1帮助查看。
 
我在MyThread.DoTerminate中添加了消息发送可是还是不行!
MyThread.OnTerminate和DoTerminate的区别呢?
 
谢谢各位帮忙!
 
后退
顶部