blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1651回复:6

如何解决多进程的问题?

楼主#
更多 发布于:2001-08-20 08:52
我针对我的一个设备作了一个User Mode下的API,我通过CreateFile打开设备并取得一个设备句柄。我现在的作法是:在每一个输出的函数中,都打开设备和关闭设备,这样就解决了多进程和多线程的问题,可是这样严重影响了效率,使对设备的访问速度下降许多。
我想这样作:在程序甚至是系统启动时,就打开设备,但我现在作到将设备多进程共享,可是第二个进程使用这个句柄WriteFile ReadFile失败。
大家的设备都要支持多进程,可没人讨论过,可能是比较菜的问题,盼望高手指点一下!我已解决了多线程。
oneq
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2001-11-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-20 13:29
将你的API放进DLL中,将取得的设备句柄放进共享数据段中.在DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH中分别打开和关闭设备.
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-20 15:14
我的API是用VC++6.0作的,你所说的DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH在哪里呀?我不太明白。
我找到一个函数DuplicateHandle()可能可以解决,我来试一试!
oneq
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2001-11-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-20 15:39
DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH是两个常量呀,在DLL入口处要判断的.
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-21 10:37
你说的我已找到,但不能解决问题呀!
我的问题是:若一个进程用CreateFile()打开设备,在它未CloseHandle以前,其它进程也不能访问此设备了。按照你的方法,如果运行一个程序的多个实例,第一个实例还正常,第二个就会CreateFile失败。
我设想多个实例共享CreateFile取得的句柄,但不知如何实现?
DuplicateHandle()我认为是可行的,可参数不知该如何取?
[blue 编辑于 2001-08-21 10:43]
oneq
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2001-11-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-08-21 15:23
我仔细看了看你的帖子,总觉得您说的进程象任务.您在CreateFile()中用FILE_SHARE_READ||FILE_SHARE_WRITE了吗?我也迷茫了.根据W32help,DuplicateHandle()应能满足你的需要,得用到进程间通信,很烦琐的.
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-08-22 17:36
句柄与进程直接相关,我只将句柄号在进程间共享用不成!
哪位高手知道?
游客

返回顶部