一个困扰我多时的DLL调用与线程开启问题

liu198165 2005-03-01 01:37:49
本人做了一个DLL 函数原形为
void CheckKey( void *dummy )
{

_endthread();

}
long MsgSend()
{

beginthread(CheckKey, 0, NULL );
return 0;

}
我以下面的三种顺序
1:
LoadLibrary
重复调用三次MsgSend方法
FreeLibrary

2:
LoadLibrary
调用MsgSend方法
FreeLibrary
LoadLibrary
调用MsgSend方法
FreeLibrary
LoadLibrary
调用MsgSend方法
FreeLibrary

3:
LoadLibrary
调用MsgSend方法
LoadLibrary
调用MsgSend方法
FreeLibrary
LoadLibrary
调用MsgSend方法
FreeLibrary
以上三种调用顺序十分奇怪的是只有第二种调用顺序会出现access violation错误

而当我把MsgSend方法调整为
long MsgSend()
{

beginthread(CheckKey, 0, NULL );
Sleep(100);
return 0;

}
这样以后,三种调用顺序居然全部正常,请哪位大虾能告诉我这究竟是为什么吗?

...全文
67 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dongfa 2005-03-02
加了Sleep正确也是因为上述的问题,MsgSend执行完成后,线程就已经结束了,因此就不会出现问题了。
回复
dongfa 2005-03-02
你调用FreeLibaray库的时候,线程还没有运行完毕,所以就出错误了,最好在FreeLibrary之前等待线程的结束.
回复
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-01 01:37
社区公告
暂无公告