多线程调用同一dll文件的问题的讨论,希望大家参加

chentank 2011-02-18 09:29:30
我现在要写一个程序,用于同时向网络中多个设备发送数据,为了节约发送时间,用户要求使用并发的方式。而程序和设备的通信管理及数据发送都是依靠设备厂商的SDK中的Dll文件中封闭的方法来完成。我通过手动创建新的线程来实现并发通信,这就需要同时在不同的线程中调用Dll中的相关方法。
现在的问题是,通过这种方法来并发通信很不稳定,比如一次要向10个设备发送数据,可能成功的只有5-6个,第二次自动重发成功只有2-3个,直到第三次或第四次才能全部发送成功,只有偶尔能够一次全部发送成功。这样的稳定性显示是不够的。
请大家帮忙分析一下造成这种不稳定的可能的原因。在线等回复。
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chentank 2011-02-18
  • 打赏
  • 举报
回复
多进程? 这样会不会太费资源了? 而且不容易管理,线程之间的通迅还是方便的,可进程之间就麻烦了。 另外,满足什么要的的方法才算是线程安全哪,初始化网络的这个方法输入的参数直接就是字符串和短整型。
Dream83619 2011-02-18
  • 打赏
  • 举报
回复
if method in the dll is a exported api, may be it's not thread-safe and you can do nothing, the only way to use concurrent is create multiple processes.
if method is a instance member, try to create multiple instances.
just personal perspective.
chentank 2011-02-18
  • 打赏
  • 举报
回复
大家一起来讨论指点我一下吧
chentank 2011-02-18
  • 打赏
  • 举报
回复
出现通信失败最多的情况就是和XX设备通信初始化失败,初始化工作就是调用DLL里的一个网络初始化方法,这个方法主要就是用给定的网络参数创建一个socket通信,这也是我线程里调用到DLL当中的第一个方法。所以第一、如果要多线程调用同一方法的话,是不是对方法本身有什么要求?第二、如果不使用手动创建线程,用线程池会不会有改善?
bdmh 2011-02-18
  • 打赏
  • 举报
回复
考虑问问厂商,看看他是否支持并发处理,不一定是你的问题

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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