【发布时间】:2011-12-07 00:20:12
【问题描述】:
在我的应用程序中,某些 dll 仅用于特定操作,而 99.9% 的使用操作不会发生。因此,为了节省加载时间和内存,这些加载是根据需要使用LoadLibrary 动态加载的。
为了让用户了解并响应程序库正在一个单独的线程上加载,然后在它们可用时通知 UI 线程并且该过程可以继续。
但是在我的实验中,当LoadLibrary 运行时,UI 线程被锁定并且事件队列无论如何都没有被处理,从而使应用程序锁定并且屏幕不再重绘。
LoadLibrary 上的 MSDN 未提及此行为,是否可以在事件队列仍在处理时在一个线程中加载 dll?
【问题讨论】:
-
UI 线程停止发送消息时在做什么? (也就是说,如果你附加调试器并在它不抽水时中断,它在调用什么?)
-
好主意忘了做,我会检查
-
这是不必要的自我惩罚。使用链接器的 /DELAYLOAD 选项。
-
如果加载的 dll 中的 dllMain 需要很长时间,则 loaderLock 保持同样的时间。那么很容易想象 GIU 线程会在 loaderLock 上被阻塞。正如詹姆斯建议的那样,使用调试器应该也很容易。
标签: c++ multithreading mfc