dll调用后出现死锁,求帮助

章鱼软件 2008-04-10 05:25:03
我的代码连续调用3个dll,
操作过程,有时正常运行,有时出现死锁,就是不动了.
代码如下:
RTX_addnewuser(add_name,RTX_ip);//创建用户
第一次调用dll

QQpwd = etUserPassword->Text;
if(QQpwd!="")
RTX_updatepwd(add_name,QQpwd,RTX_ip);//创建密码
第二次调用dll

RTX_adduser_to_dept(add_name,RTX_begindept,RTX_enddept,RTX_ip);//用户添加到部门
第三次调用dll

dll的调用如下......
handledel=LoadLibrary("RTX_deldept.dll"); //获取dll RTX_deldept的句柄
if(handledel)
{
lpFarProcdel = GetProcAddress(handledel,"DelDept"); //通过句柄回去函数DelDept的接口
}
try
{
if(lpFarProcdel)
{
lpdeldept = (void(_cdecl *)(char *,char *))lpFarProcdel; //指针类型转换
lpdeldept(del_deptname.c_str(),RTX_ip.c_str());//参数1-删除的部门,2-ip
}
}
__finally
{
FreeLibrary(handledel);
}

后面有freelibrary了.
请问为什么会偶尔出现死锁.

有什么好的方法来解决dll的调用么??
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iGoo 2008-04-30
  • 打赏
  • 举报
回复
用vc启动你的程序,当你认为程序死锁后按“||”暂停程序,打开线程编辑栏观察是否有线程
被阻塞在某个控制同步机制的变量上
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
blastzgd 2008-04-29
  • 打赏
  • 举报
回复
连续调用3个dll.

是3个不同的还是3次相同的?
cnzdgs 2008-04-29
  • 打赏
  • 举报
回复
DLL死锁比较容易发生在DllMain里面,DllMain里面最好不要执行复杂操作。
Yofoo 2008-04-28
  • 打赏
  • 举报
回复
调试, 在死锁的时候点暂停, 看callstack,
找到你代码的地方看在哪死锁了
吹雪 2008-04-28
  • 打赏
  • 举报
回复
try和__finally不能搭配在一起吧,应该用__try.

你这三个调用是在同一线程里进行的吗?如果是同一线程,就不存在死锁,应该检查dll中函数的实现.

15,471

社区成员

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

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