我有我的延迟加载的DLL里面一个实例(全局/静态对象)ClassA的。 这个对象内部具有需要执行正常关机的“观察者”的线程。 当我调用FreeLibrary我注意到,这是静态对象的删除过程中我的线程要求关机,但挂在_endthreadex()和原因僵局。 如果我显式或隐式调用_endthreadex没关系。 这不要紧,如果对象是全局或静态 - 同样的结果。 这个线程包裹在ClassB的(由模板的自定义消息循环实现)。 有关机螺纹(POST消息)和以下WaitForSingleObject的从未返回给定线程heandle的请求。
在代码和关机到处使用相同的“模板线程类”的伟大工程。 删除静态OBJ时,唯一的问题。 我认为这是_endthreadex的内部(一些锁),这是已经被锁定在DLL卸载和静态对象的删除。
螺纹开始_beginthreadex。 PS。 当我实例化的应用内相同的静态OBJ - 应用程序关闭,没有任何显著的问题。
任何想法,为什么_endtreadex导致死锁? 如何避免呢?