一个困扰我多时的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;

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

...全文
90 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongfa 2005-03-02
  • 打赏
  • 举报
回复
加了Sleep正确也是因为上述的问题,MsgSend执行完成后,线程就已经结束了,因此就不会出现问题了。
dongfa 2005-03-02
  • 打赏
  • 举报
回复
你调用FreeLibaray库的时候,线程还没有运行完毕,所以就出错误了,最好在FreeLibrary之前等待线程的结束.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧