我有一个调用DLL的Delphi代码。DLL是动态链接的。
在我的代码开头,我通过]启动/打开了DLL。>
DllHandle:= LoadLibrary(DllFileName);
DLLHandle=0
,这很好。我可以继续执行主程序中的下一行。non-zero DLLHandle
,这也很好。但是在DLL内时常出问题,这意味着该文件存在但DLL没有响应。所以我的主要应用程序是挂起的。
为了避免这种情况,我研究了多线程。
我的主程序具有从TMyThread
继承并覆盖TThread
的新类型Create, Destroy, Execute
。
我的主程序正在动态创建一个新线程(ChildThread
)。 ChildThread的Execute
方法正在调用上述的LoadLibrary。
这样做,我可以继续执行我的主程序并稍等一下,以查看ChildThread
是否返回非零的DLL句柄。如果几秒钟后ChildThread中的DLLhandle仍然为零,我想杀死线程并释放DLL并重试。
进一步研究,我可以在Delphi IDE中看到线程列表。最初,我的主程序下有4个线程。当我创建ChildTread时,会显示一个新的。几秒钟后(当在ChildTread中调用Execute并调用loadlibrary时)又出现了两个线程。我猜主DLL正在调用其他线程。
在此阶段,我无法访问ChildTread,因此我无法在Execute方法中使用while循环来查看其是否终止并退出线程。因为该线程中的实际代码已经挂在执行中。
问题:ChildTread
挂起,但我的主程序继续。我想从主程序中杀死ChildThread(也许它启动的所有其他线程)并重试 DllHandle:= LoadLibrary(DllFileName);
我有一个调用DLL的Delphi代码。 DLL是动态链接的。在我的代码开头,我通过DllHandle启动/打开DLL:= LoadLibrary(DllFileName);如果DLL文件没有...
我的主程序正在动态创建一个新线程(ChildThread)。 ChildThread的Execute方法正在调用上述LoadLibrary。