希望实现启动一个进程打开一个串口,再运行另一个进程也打开此串口,要求两个串口能同时对此串口进行操作,如何实现
我尝试用内存映射方式共享打开串口的句柄,失败
是否有更好的方式

解决方案 »

  1.   

    是啊,楼上说的楼主可以考虑下
    这也正是是Windows驱动分层的思想
      

  2.   

    进程间共享句柄请用DuplicateHandle函数。
    另其实你可以用一个独立程序(服务端)作为操作中转,把其他所有进程(客户端)需要读、写的数据用内存映射与服务端进行通信,一切访问操作都由服务端进行。
      

  3.   

    进程的每个动作都将有多次串口通讯,在进行操作的时候将锁定
    只有执行完毕再打开.如果上一个动作没有执行完则等待
    -------------
    既然这样,那你就谁要用谁打开好了,完了马上关闭。个人感觉你这种解决方案也不是长久之计,到下一版再改进好了/。或者你就用wangk(倒之)的方法DuplicateHandle试试。
      

  4.   

    我两个或多个进程相互是独立的关系,分别启动运行的
    虽然可能是同一应用程序
    这样DuplicateHandle还能用吗
      

  5.   

    小弟刚刚看了windows核心编程的前几章,正好有这个问题.
    你可以建立一个内核对象(同步,互斥多可以,传入对象名,比如"aaaMutex"),然后进行开启的时候创建这个对象,如果可以建立,那么说明还没有相关程序开启,如果返回错误,可以查看错误代码是否为ERROR_ALREADY_EXISTS, 如果是,那么说明已经有相关程序开启,就可以DuplicateHandle了.HANDLE h = CreateMutex(NULL,FALSE,"aaaMutex");
    if(GetLastError()==ERROR_ALREADY_EXISTS)
    {}
      

  6.   

    DuplicateHandle就是为了解决不同进程间共享句柄而产生的。
    所以进程相互是独立的关系,没有问题。
      

  7.   

    可是DuplicateHandle的第一和第三个参数hSourceProcessHandle和hTargetProcessHandle
    是否说明源进程复制句柄时需事先知道目标进程的句柄
    这样的话,我后面的进程还没调用,那来的句柄呢
      

  8.   

    后面打开的进程,用消息通知最早的进程,告诉它自己的PID。
      

  9.   

    如果A有对内核对象C访问,希望B也能拥有对C的访问
    hSourceProcessHandle是A
    hTargetProcessHandle是B
    hSourceHandle是C
    是在A程序中使用DuplicateHandle吗那B中如何获得C的访问呢