标题:[分享][原创]关于在MFC规则DLL的App初始化时创建线程的失败原因
只看楼主
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
 问题点数:0 回复次数:4 
[分享][原创]关于在MFC规则DLL的App初始化时创建线程的失败原因

那天在MSDN上发问题的时候看到一篇贴子,里面提问为什么在MFC规则DLL的App初始化时创建线程的失败。

他是这样做的:

...CMyApp::InitInstance()

{

::AfxBeginThread(.....); }

我感到很有意思,就自己测试了一下,经过调试发现是程序走到一个事件对象时候死锁了

::WaitForSingleObject(事件对象,INFINITE); \\永远等待事件对象

当时也是百思不得其解......

后来我翻了翻《Windows核心编程》,找到了问题所在:

因为DLL当每次有新线程创建的时候,系统都会查看当前映射到此进程的地址空间中的所有DLL,并且调用每个DLL带有DLL_THREAD_ATTACJH值的DllMain函数,又因为当前就是在这个DLL的DllMain函数里,所以就死锁了。

搜索更多相关主题的帖子: MFC App 线程 DLL 规则 
2004-12-03 17:55
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 

想问楼主 学好 VC的 基础是什么啊??是不是要学好MFC啊??


2004-12-03 17:57
YINI
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-12-2
得分:0 

学好c++ ,熟悉mfc


/ip/1.php" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://dqdj./ip/1.php');}" onmousewheel="return imgzoom(this);" alt="" />
2004-12-06 22:14
polyrandom
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2004-12-10
得分:0 

to 楼主:

1.这个地方可能不是Windows的限制(Windows有这样的戒条,但是你调试进去应该看不到代码的) 2.梁肇新的书不好 3.如果你是一个C++程序员


http://www./ http://www./
2004-12-10 18:57
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
得分:0 

呵呵,为什么这么说呢?


I am a big fan of c plus plus.
2004-12-12 14:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-8784-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021028 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved