`
qq1113130712
  • 浏览: 7495 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简记:关于windows进程间通信的各种方式对比(上)

 
阅读更多

  晚上到现在,总算是搞懂了一些。。略微简记一下,等把剩下的东西也完全搞懂了,好好的用代码来感受一下各种通信方式的优劣。此乃后话,不多提也罢。。

    利用windows消息机制,向无窗体的线程发送消息来达到异步通信的方式一直没有搞定。。主要的原因是,1、windows默认的WM_COPYDATA不支持在异步环境下的通信。2、WM_COPYDATA在windows消息机制中是利用命名管道来传输数据。而我自定义的消息,无法(至少我没有做到)通过管道传输数据,仅仅是实现了基础数据传输,无法做到结构体,数组,字符串的传递。

    共享内存。单单就异步传输来说,这种方式我感觉应该是用起来最舒服的,因为他只有一块内存,完全不存在双方等待信号的过程。但是也正式因为如此,此种方式必须要自己设置一个信号字段,来标志当前这一次在内存中读取的数据是否有效。如果在一对多或者多对多的时候,自然显得混乱。十分适合一对一进程通信,尤其是单向异步通讯。

    命名管道。抛开socket不谈,命名管道应该是所有进程间通信方式中用起来最方便的。(不排除习惯使用socket是因为个人使用多了的原因,至少是个人感觉罢)。命名管道的同步通信有点简单。MSDN上有相应的例子,没有啥误区。在异步通信这一块,虽然也是有demo的,但是稍微卡了我一下的是,CallNamedPipe经常返回参数错误的问题。。后来仔细看了一下MSDN上的说明,发现在备注里面有这么一句:CallNamedPipe fails if the pipe is a byte-type pipe。。。。后来只能乖乖的按照MSDN的demo,把数据传输模式编程message模式。两者之间的差距MSDN上也说的很明白。。。不知道把BYTE 打包为MESSAGE来发送,算不算是异步传输中的小同步。。。

    socket就不提了。。。留着以后总结的时候再说。。。

    好了,先写到这里,等搞通了剩下的,在好好的总结一下通信,现在还没有资格。。希望卡了我好几天的那个问题,,明天能够顺顺利利的解决。。阿门。。哈哈

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics