首页
社区
课程
招聘
[求助] DLL调用 socket相关函数会阻塞,求解
发表于: 2020-1-23 13:25 3824

[求助] DLL调用 socket相关函数会阻塞,求解

2020-1-23 13:25
3824
EXE 载入 DLL后,DLL执行入口函数 调用  SOCK相关函数会卡住。

即使以线程方式启动,只要DLLmain未返回 ,都  处于阻塞状态,求教。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
2
几个原因:
1、dllmain 中也许不能调用 socket 相关函数。(但在文档中好像没看到有说这点
2、如果第 1 条是对的,那你创建线程去调用 socket 相关函数是可以的,但不能在 dllmain 中同步等待这条线程。
3、尝试设置 项目 -> 属性 -> C/C++ -> 代码生成 -> 运行库 -> 多线程(/MT)。
2020-1-23 16:39
1
雪    币: 137
活跃值: (453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
贴一下代码吧,权宜之计可以把调用socket的相关函数作为导出函数,在exe里调用
2020-1-23 17:02
0
雪    币: 573
活跃值: (222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
DLLmain 确实不应该调用 长期阻塞的函数吧。
除非在DllMain中自己再创建一个线程。
然后DllMain就可以返回了呗。
最后于 2020-1-23 17:08 被supersoar编辑 ,原因:
2020-1-23 17:08
0
雪    币: 772
活跃值: (992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Sprite雪碧 几个原因: 1、dllmain 中也许不能调用 socket 相关函数。(但在文档中好像没看到有说这点 2、如果第 1 条是对的,那你创建线程去调用 socket 相关函数是可以的,但不能在 dl ...
的确,只要main函数 不退出,线程就无法执行相关socket操作。
希望能有解决办法。
2020-1-23 17:20
0
雪    币: 772
活跃值: (992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
情趣杜蕾斯 贴一下代码吧,权宜之计可以把调用socket的相关函数作为导出函数,在exe里调用
代码不是C代码,就是一句话的事情,EXE调用 LoadLibraryA 加载 DLL;
DLLMAIN函数下执行HTTP读取文件或者TCP通讯。
都会阻塞,即使以线程启动相关操作,main函数不退出,sock无法继续。
2020-1-23 17:22
0
雪    币: 772
活跃值: (992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
main函数返回 前 需要执行http或TCP通讯,
2020-1-23 17:25
0
雪    币: 9044
活跃值: (6260)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
socket可以异步,不需要额外创建线程,select检测是否有数据可读
2020-1-23 17:56
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
9
ffashi main函数返回 前 需要执行http或TCP通讯,
这么做的目的是什么呢 完全可以做个导出函数啊
2020-1-23 18:31
0
雪    币: 772
活跃值: (992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mudebug socket可以异步,不需要额外创建线程,select检测是否有数据可读
我发个例子,EXE是固定的,只装载DLL、
DLL启动后,执行相关的HTTP或 TCP 操作,获取数据。

问题是,DLLmain下必须得到指定信息。但因为DLLMAIN 没返回之前,socket相关函数处于阻塞状态。无法继续执行。

求解
上传的附件:
2020-1-23 19:22
0
游客
登录 | 注册 方可回帖
返回
//