好的我正在编写一个Zoom组件,我希望它能在一个辅助线程中从屏幕捕获.您可以假装我只想在空组件中派生TThread.我没有在线程中写任何代码,所以它只是一个简单的无用线程.我Thrd := TCaptureThread.Create(False);在组件主类中编写了这段代码.然后我Thrd.Free在主类破坏代码中写道.现在,当我关闭整个应用程序时,尽管它会破坏所有内容,但该过程并未完全终止.在Windows任务管理器中显示线程数为1但该过程仍然存在.如果我评论线程创建行,一切都会变好,应用程序会很快终止.我该怎么办呢?:(
提前致谢
Thrd.Free从TThread.Destroy运行中调用以下代码时:
Terminate;
if FCreateSuspended then
Resume;
WaitFor;
Run Code Online (Sandbox Code Playgroud)
因此,调用Free线程将同步终止线程.
我的猜测是WaitFor永远不会回来.也许TCaptureThread.Execute不检查Terminated并退出.也许TCaptureThread是在等待主线程,所以等待线程死锁.
根据你的问题,除了猜测之外做任何其他事情都很难,但我想检查你的代码是否WaitFor在破坏中超过了调用Thrd.启用调试DCU,设置一个断点,然后调用WaitFor并查看.