多进程的编程的问题

zhl71199713 2011-09-05 03:01:47
我现在在一个程序中调用的一个dll,一次只能被一个线程调用,如何实现可以并发调用该dll,windows环境下,用多进程编程吗?多进程的资源比较少,谁有一个例子能参考一下啊?
采用多线程编程,但是还是不能被并发调用。
希望各位大神们提宝贵意见!谢谢!
...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2011-09-05
  • 打赏
  • 举报
回复
你有搞多进程再封装这个dll的闲工夫还不如重写一个...
chichenzhe 2011-09-05
  • 打赏
  • 举报
回复
多进程可以解决.

任务A 可以用多线程解决 同时也可以用多进程解决.

比如写一个控制程序 来控制 工作程序1,工作程序2,工作程序3 ;
程序间通信模式采取 回环地址socket

这样工作程序1,2,3... 每个各自使用单线程启动自己的DLL.


这不就搞定了么.

bios8086 2011-09-05
  • 打赏
  • 举报
回复
照样在用C#重新写
b_duan 2011-09-05
  • 打赏
  • 举报
回复
省事的办法(下下策),多复制几个DLL,dll1,dll2等,弄个全局变量计数。不知道是否可行,
funxu 2011-09-05
  • 打赏
  • 举报
回复
我也刚看明白,Lz说的不是每个进程load dll只有一个实例的问题,而是dll函数中做了线程访问数量控制
如果不是进程级的锁,到可以用多进程实现
例如
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"D:\test.exe";
Process.Start(psi);
如果是只能重写了
sanjiawan 2011-09-05
  • 打赏
  • 举报
回复
用我上面的代码 自己建一个按钮和文本框就知道了(注意控件的命名) 我只是给个多线程编程的例子 至于你说调用dll 我还真没常识过
sanjiawan 2011-09-05
  • 打赏
  • 举报
回复
给你个多线程的例子

private void btnDataUp_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法
thread.Start();
txb.Text="我先看到效果"; //文本框
}


private void GetDataUp()
{
//执行的代码
Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () =>
{
Thread.Sleep(5000);
MessageBox.Show("我第二显示出来");

};
btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法

}


  • 打赏
  • 举报
回复


木有明白LZ的意思 !

帮顶嘛 !
sanjiawan 2011-09-05
  • 打赏
  • 举报
回复
楼主 给你一个多线程编程的例子 第一个是按钮事件

private void btnDataUp_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(GetDataUp); //创建一个线程 其中GetDataUp是该线程要执行的方法
thread.Start(); //该线程运行 无论上述线程是否执行完毕都继续执行一下代码
lblUpdateMessage.Visibility = Visibility.Visible;
}


private void GetDataUp()
{
//执行的代码
Action action; //封装一个方法 该方法不具备参数并且不返回值 action = () =>
{
//执行的代码
};
btnDataUp.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle, action); //关联的线程上异步执行委托 执行Action方法

}
  • 打赏
  • 举报
回复
没有办法,那是你的dll开发时选择的线程模式的问题,如果多线程调用它就会使得它崩溃。唯一的办法就是删除它,你使用.net重新写,或者让作者重新写。
funxu 2011-09-05
  • 打赏
  • 举报
回复
每个线程调用dll时,dll都会在该线程内映射一份自己,所以无所谓一次几个线程去调用的问题

110,533

社区成员

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

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

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