多个进程间如何实现串口控制共享

skyzxg 2005-12-02 09:41:22
希望实现启动一个进程打开一个串口,再运行另一个进程也打开此串口,要求两个串口能同时对此串口进行操作,如何实现
我尝试用内存映射方式共享打开串口的句柄,失败
是否有更好的方式
...全文
759 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyzxg 2005-12-08
  • 打赏
  • 举报
回复
Up
skyzxg 2005-12-08
  • 打赏
  • 举报
回复
后一个进程如何得到复制的句柄呢
skyzxg 2005-12-08
  • 打赏
  • 举报
回复
如果A有对内核对象C访问,希望B也能拥有对C的访问
hSourceProcessHandle是A
hTargetProcessHandle是B
hSourceHandle是C
是在A程序中使用DuplicateHandle吗

那B中如何获得C的访问呢
wangk 2005-12-07
  • 打赏
  • 举报
回复
后面打开的进程,用消息通知最早的进程,告诉它自己的PID。
skyzxg 2005-12-07
  • 打赏
  • 举报
回复
可是DuplicateHandle的第一和第三个参数hSourceProcessHandle和hTargetProcessHandle
是否说明源进程复制句柄时需事先知道目标进程的句柄
这样的话,我后面的进程还没调用,那来的句柄呢


wangk 2005-12-07
  • 打赏
  • 举报
回复
DuplicateHandle就是为了解决不同进程间共享句柄而产生的。
所以进程相互是独立的关系,没有问题。
skyzxg 2005-12-07
  • 打赏
  • 举报
回复
楼上,我说的是进程之间而不是线程
38062708 2005-12-06
  • 打赏
  • 举报
回复
开一个线程负责串口通信,其他线程给它发消息或置信号
打雷啦的专栏 2005-12-06
  • 打赏
  • 举报
回复
小弟刚刚看了windows核心编程的前几章,正好有这个问题.
你可以建立一个内核对象(同步,互斥多可以,传入对象名,比如"aaaMutex"),然后进行开启的时候创建这个对象,如果可以建立,那么说明还没有相关程序开启,如果返回错误,可以查看错误代码是否为ERROR_ALREADY_EXISTS, 如果是,那么说明已经有相关程序开启,就可以DuplicateHandle了.

HANDLE h = CreateMutex(NULL,FALSE,"aaaMutex");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{

}
hjunxu 2005-12-02
  • 打赏
  • 举报
回复
其实就算楼主你实现你的想法,那么请问当从串口收数据的时候怎么办?
skyzxg 2005-12-02
  • 打赏
  • 举报
回复
我的想法是两个进程同时操作一个串口,两个级别相同在相互不干扰的情况下可以自行操作串口通讯,当其中某一个进程结束后,另一个仍然可以进行通讯
friends1979 2005-12-02
  • 打赏
  • 举报
回复
不知道你是想做什么,是不是可以通过硬件实施。用发送数据的这一个串口引出2根接收和发送线,送往不同的串口。你用这两个进程控制不同的串口,其实是对同一个串口进行操作。

你上面说的多串口共享其实是共享了硬件(我感觉)。你可以也用2个进程对一个串口操作,但前提是只能有一个进程打开串口,另一个进程给此进程发消息响应,然后通过此进程操作串口。
wangk 2005-12-02
  • 打赏
  • 举报
回复
进程间共享句柄请用DuplicateHandle函数。
另其实你可以用一个独立程序(服务端)作为操作中转,把其他所有进程(客户端)需要读、写的数据用内存映射与服务端进行通信,一切访问操作都由服务端进行。
skyzxg 2005-12-02
  • 打赏
  • 举报
回复
你们的意思是把串口通信做一个单独的模块,不同进程同时调用此模块
这种方法是可以,不过我的程序已经写好了,这样要大改,时间有点来不及
如果我每发次串口命令前都重新打开串口,结束后关闭串口呢

Featured 2005-12-02
  • 打赏
  • 举报
回复
是啊,楼上说的楼主可以考虑下
这也正是是Windows驱动分层的思想
hjunxu 2005-12-02
  • 打赏
  • 举报
回复
这好像不太好吧。
要不楼主再加一层,向下负责和串口通讯,向上负责和所有要访问该端口的进程通讯。
skyzxg 2005-12-02
  • 打赏
  • 举报
回复
我两个或多个进程相互是独立的关系,分别启动运行的
虽然可能是同一应用程序
这样DuplicateHandle还能用吗
hjunxu 2005-12-02
  • 打赏
  • 举报
回复
进程的每个动作都将有多次串口通讯,在进行操作的时候将锁定
只有执行完毕再打开.如果上一个动作没有执行完则等待
-------------
既然这样,那你就谁要用谁打开好了,完了马上关闭。个人感觉你这种解决方案也不是长久之计,到下一版再改进好了/。

或者你就用wangk(倒之)的方法DuplicateHandle试试。

skyzxg 2005-12-02
  • 打赏
  • 举报
回复
进程的每个动作都将有多次串口通讯,在进行操作的时候将锁定
只有执行完毕再打开.如果上一个动作没有执行完则等待

不过这些都是后期的事情
目前先要解决如何共享的问题

16,482

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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