认为自己再多线程方面有经验的来看看,估计是Windows的bug
在DllMain中,DLL_PROCESS_ATTACH时创建了线程,在DLL_PROCESS_DETACH的时候用这样的语句等待线程返回
g_bWork = false;
if( g_hFileCheck != INVALID_HANDLE_VALUE )
{
WaitForSingleObject( g_hFileCheck, INFINITE );
CloseHandle( g_hFileCheck );
}
g_bWork 是控制线程是否继续的变量
while( g_bWork )
{
// code here
}
但是WaitForSingleObject( g_hFileCheck, INFINITE );一直阻塞,没有返回。
这是什么原因?
我跟踪到crt库中,程序已经调用了ExitThread,按理说此时的线程句柄应该收到一个信号量,使WaitForSingleObject( g_hFileCheck, INFINITE );可以正常退出。这个我在主线程中是经过验证的,可行的。
我想问题可能出在 "DLL_PROCESS_DETACH 的时候用这样的语句等待线程返回。"
希望高人指点。
g_bWork = false;
if( g_hFileCheck != INVALID_HANDLE_VALUE )
{
WaitForSingleObject( g_hFileCheck, INFINITE );
CloseHandle( g_hFileCheck );
}
g_bWork 是控制线程是否继续的变量
while( g_bWork )
{
// code here
}
但是WaitForSingleObject( g_hFileCheck, INFINITE );一直阻塞,没有返回。
这是什么原因?
我跟踪到crt库中,程序已经调用了ExitThread,按理说此时的线程句柄应该收到一个信号量,使WaitForSingleObject( g_hFileCheck, INFINITE );可以正常退出。这个我在主线程中是经过验证的,可行的。
我想问题可能出在 "DLL_PROCESS_DETACH 的时候用这样的语句等待线程返回。"
希望高人指点。
...全文
相关推荐
Windows下查看进程中的线程
在Windows操作系统中,管理和分析进程中的线程是系统管理员和开发者日常工作中不可或缺的一部分。了解如何查看这些线程有助于排查性能问题、定位程序错误以及优化系统资源的使用。
windows API 线程的创建
Windows API提供了`CreateThread`函数,用于创建新的线程。
windows server 2008 r2 bug修复补丁
为了确保系统的稳定运行,管理员应定期检查并安装Windows Update提供的安全更新和关键补丁,尤其是针对这种直接影响服务可用性的bug修复。
高效linux的多线程编程经验12条总结
然而,由于Linux多线程API与Windows等其他操作系统存在一定的差异,开发者在实际编程过程中往往会遇到各种陷阱和挑战。
windows线程
在Windows操作系统中,线程是进程中的一个执行流,它代表了CPU调度的基本单位。线程使得多任务处理成为可能,允许程序同时执行多个独立的代码段。


进程/线程/DLL
