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