线程中的奇怪问题,应用程序不会退出

Jav*_*vid 2 delphi delphi-xe

好的我正在编写一个Zoom组件,我希望它能在一个辅助线程中从屏幕捕获.您可以假装我只想在空组件中派生TThread.我没有在线程中写任何代码,所以它只是一个简单的无用线程.我Thrd := TCaptureThread.Create(False);在组件主类中编写了这段代码.然后我Thrd.Free在主类破坏代码中写道.现在,当我关闭整个应用程序时,尽管它会破坏所有内容,但该过程并未完全终止.在Windows任务管理器中显示线程数为1但该过程仍然存在.如果我评论线程创建行,一切都会变好,应用程序会很快终止.我该怎么办呢?:(

提前致谢

Dav*_*nan 6

Thrd.FreeTThread.Destroy运行中调用以下代码时:

Terminate;
if FCreateSuspended then
  Resume;
WaitFor;
Run Code Online (Sandbox Code Playgroud)

因此,调用Free线程将同步终止线程.

我的猜测是WaitFor永远不会回来.也许TCaptureThread.Execute不检查Terminated并退出.也许TCaptureThread是在等待主线程,所以等待线程死锁.

根据你的问题,除了猜测之外做任何其他事情都很难,但我想检查你的代码是否WaitFor在破坏中超过了调用Thrd.启用调试DCU,设置一个断点,然后调用WaitFor并查看.