Delphi 线程问题 详细说明如下 100

主程序里面,一进入窗体就会执行一下代码mThread:=nil;//mThread是一个全局变量WriteLog('[开启线程!]');//记录主线程日志mThread:... 主程序里面,一进入窗体就会执行一下代码
mThread:=nil;//mThread是一个全局变量
WriteLog('[开启线程 !]');//记录主线程日志
mThread:=TMainThread.Create(False);//创建线程
mThread.OnTerminate:=mainOnTerminate;//线程结束后执行的方法

TMainThread 线程
procedure TMainThread.Execute;
begin
FreeOnTerminate:=True;
WriteLogThread('线程开启,ID:'+inttostr(mimaJianPan.ThreadID));;//记录TMainThread 线程日志
//线程执行代码...
//...........
WriteLogThread('线程结束,ID:'+inttostr(mimaJianPan.ThreadID));
end;

运行过程中有时候会出现一个问题,就是mThread创建完毕后,线程没有执行。主线程日志记录到 ‘[开启线程 !]’,但是TMainThread 线程日志并没有记录 '线程开启',mainOnTerminate也没执行。难道是线程没有创建成功吗?正常情况下,日志记录都与预期一致,但出现这种问题是是在是搞不懂,为什么创建线程的代码执行完了也没有报错,而TMainThread.Execute方法没有运行呢??恳请大神们指点
展开
 我来答
zhl_529
2017-01-11 · TA获得超过151个赞
知道小有建树答主
回答量:387
采纳率:72%
帮助的人:95.2万
展开全部
有可能是构造函数中的参数不是CreateSuspended导致线程创建后没有自动执行
追问
这个应该不会吧,继承Thread的方法。线程指定Onterminate:=SomeFunction后,什么时候释放?Somefunction执行完了才释放吗?
追答
因为你指定了FreeOnTerminate:=True;(一般写在构造函数而不是Execute方法中)所以excute执行完成后就会释放,释放前会先执行SomeFunction。
如果你的问题是有时候出现有时候不出现,那有些奇怪,如果始终出现,那就可能是线程没有执行,可能TMainThread线程的构造函数有问题,看看是不是没有inherited;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式