sol*_*old 10 dll winapi multithreading
似乎从DllMain中创建一个线程,DLL_PROCESS_ATTACH直到所有dll都被加载后它才会开始.因为我需要在继续之前确保线程运行,所以我遇到了僵局.有没有办法强制线程启动?
Ken*_*ite 10
您不应该从DLLMain执行任何API调用,尤其是对于创建线程或窗口等内容.Raymond Chen多次写过这篇文章; 这是一个特别相关的.
你的主题是做什么的?
如果你试图将东西移到第二个线程上以避免限制你在DllMain中可以做什么,那就太难了.这些不是对DllMain可以做什么的限制,它们是对DllMain运行时可以做什么的限制(并且保持加载器锁定).如果你的线程需要加载加载器锁,它将等到第一个线程完成使用它.如果你的线程不需要加载器锁,我不明白为什么它不能立即继续......但是没有一个不需要加载器锁的线程.Windows必须在您的线程开始运行之前向所有DLL发送DLL_THREAD_ATTACH消息,这意味着它还会调用您自己的DllMain,并且Windows可以防止重入.
没有办法解决这个问题.线程无法在DLL_THREAD_ATTACH处理之后启动,并且当您的第一个线程在DllMain内时不会发生.唯一可行的方法是启动一个新进程(它有一个独立的加载器锁定,不会阻止等待你的进程).