【发布时间】:2011-08-15 07:44:40
【问题描述】:
我有一个用 C 语言编写的本地 Windows DLL。这个 DLL 旨在加载(注入)到不同的 Windows 进程中。该 DLL 创建了一些工作线程,如下所示:
while(1) {
// do work
Sleep(few secs);
}
问题是如果进程退出并且 DLL 在线程处于 Sleep() 时卸载,它会在进程从睡眠返回时崩溃(线程将尝试执行不存在的代码)。我正在考虑将 TerminateThread() 与 DllUnload 处理程序一起使用,但 MSDN 说它应该只在最极端的情况下使用。例如 - 我的线程使用关键部分,文档说:
如果目标线程拥有临界区,则临界区不会被释放。
如何在 DLL 卸载时彻底关闭正在休眠的线程?我应该重新设计我的工作线程以以其他方式工作吗?
【问题讨论】:
标签: multithreading dll