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方法没有运行呢??恳请大神们指点 展开
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方法没有运行呢??恳请大神们指点 展开
展开全部
有可能是构造函数中的参数不是CreateSuspended导致线程创建后没有自动执行
追问
这个应该不会吧,继承Thread的方法。线程指定Onterminate:=SomeFunction后,什么时候释放?Somefunction执行完了才释放吗?
追答
因为你指定了FreeOnTerminate:=True;(一般写在构造函数而不是Execute方法中)所以excute执行完成后就会释放,释放前会先执行SomeFunction。
如果你的问题是有时候出现有时候不出现,那有些奇怪,如果始终出现,那就可能是线程没有执行,可能TMainThread线程的构造函数有问题,看看是不是没有inherited;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询