首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DllMain中创建线程?

在DllMain中创建线程?
EN

Stack Overflow用户
提问于 2009-11-06 23:22:59
回答 4查看 16.8K关注 0票数 11

当在DLL_PROCESS_ATTACH上从DllMain中创建线程时,它似乎要等到所有的动态链接库都加载后才会开始。因为在继续之前我需要确保线程运行,所以我得到了一个死锁。有没有办法强制线程启动?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-06 23:37:32

您不应该从DLLMain进行任何API调用,尤其是创建线程或窗口之类的操作。Raymond Chen已经写过很多次了;这里有一个特别相关的one

票数 12
EN

Stack Overflow用户

发布于 2010-02-07 02:30:30

你的线程是做什么的?

如果你试图把东西移到第二个线程上,以避免在DllMain中做什么的限制,那就倒霉了。这些不是对DllMain可以做什么的限制,而是对DllMain运行(并持有加载器锁)时可以做的事情的限制。如果你的线程需要获取加载器锁,它将一直等到第一个线程使用完它。如果你的线程不需要加载器锁,我不明白为什么它不能立即继续...但是没有不需要加载器锁的线程。在你的线程可以开始运行之前,Windows必须向所有的DllMain发送DLL消息,这意味着它也会调用你自己的DLL,并且Windows可以防止重新进入。

这是没有办法的。线程只有在DLL_THREAD_ATTACH处理之后才能启动,而当您的第一个线程在DllMain中时,这种情况就不会发生。唯一可能的方法是启动一个新的进程(它有一个独立的加载器锁,不会阻塞等待你的进程)。

票数 6
EN

Stack Overflow用户

发布于 2009-11-06 23:36:09

不是的。您不应该从DllMain调用CreateThread (或任何变量)。尝试同步将导致死锁。你到底想做什么?

Best Practices for Creating DLLs

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1688290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档