我自己测试的时候,是这个现象,希望得到高手的指点,和确认:假设我建立一个线程类 TMythread=class(TThread)
有个TMythread的对象 aObj:TMyThread;
问题一:
1:如果aObj还在执行execute方法中的代码,
这时候,如果我执行aObj.Termiante,是不是要等execute()方法中的程序执行完毕之后,才会Terminate.
如果,我先把aObj.Suspend,然后Terminate,那么会立即终止。疑问2:
我在TMyThread.Execute();
begin
FreeOnTerminate:=True;
OnTerminate:=Form1.pd1; //指定一个事件给OnTerminate
.......
end;为什么我执行aObj.Terminate的时候,不会执行OnTerminate指定的事件
???????????????
有个TMythread的对象 aObj:TMyThread;
问题一:
1:如果aObj还在执行execute方法中的代码,
这时候,如果我执行aObj.Termiante,是不是要等execute()方法中的程序执行完毕之后,才会Terminate.
如果,我先把aObj.Suspend,然后Terminate,那么会立即终止。疑问2:
我在TMyThread.Execute();
begin
FreeOnTerminate:=True;
OnTerminate:=Form1.pd1; //指定一个事件给OnTerminate
.......
end;为什么我执行aObj.Terminate的时候,不会执行OnTerminate指定的事件
???????????????
解决方案 »
- 求图片识别DEMO,大牛来出出招吧!
- 如何向菜单里动态添加子菜单
- indy udp怎么不能在win98里收到数据?
- 请教如何将软盘中的EXCEL数据导入到SQL数据库中(用程序实现),请给出例子或设计提示?
- 请各位高手发表高见——《成大事的先决条件是什么?》
- 个位高手,有没有谁知道如何在OutLookBar中插入TreeView 等其他控件,谢谢了
- d2009 datasnap json 传递三个OleVariant参数导致服务端退出
- 挑战难度!
- VC++函数到delphi的翻译!!!!!
- 好人一生平安
- 真冤~~
- 如何为listbox/treeview的每一个选择项(节点)增加一个datastring的属性?
terminate要等execute执行完才会执行
没试过Suspend下terminate是否会终止,写个简单的例子试一下疑问2:你要在Form1中这样写代码
aObj.Onterminate = pd1;
你可以再线程里判断该值才决定是否退出 并不会强制中止线程这一点和API TerminateThread不一样 这个是强行干掉的
如果线程对象aObj还在执行execute()方法中的内容,那么我调用aObj的Terminate方法,
要等到execute中的内容执行完了之后,线程对象aObj才会终止。 我的问题是:如果aObj还在执行中,这时候我调用挂起线程的方法aObj.Suspend;
然后再执行aObj.Terminate();
那应该也要等到aObj唤醒时,把execute()中代码执行完成后,线程才会终止吧??????
在线程内部如果使用Synchronize(....)来控制窗体的vcl控件,是把该该处理过程放在主线程的执行队列中,等待主线程运行。那会不会出现这样的情况,会不会出现这种情况:synchronize(...)方法中的在操作vcl的同时,主线程也操作vcl(比如鼠标操作了该vcl控件)???
所以不会造成同时执行