关于管道通信和多线程应用 调试总结...

原创 2016年05月31日 11:58:10

关于管道通信和多线程应用 调试总结...


最近我做了一个Named Pipe 同学示例程序,在调试的过程中 遇到若干问题,现在简单总结一下 :


首先简单介绍一下,给予MFC 单文档应用程序,两个独立的小项目,暂且把这两个项目定义为 MASTER , 和SLAVE 每个项目中各自创建一个 命名管道,作为服务器端;再分别在客户端客户端创建打开对方的管道,接受连接,做握手通讯,表示管道连接成功。 然后Master 端发起命令,Slave端接受到命令,做定时发送数据,由Maser 端接收数据;

如下图 :




问题1.    管道在建立的时候 主管道句柄 被提前关闭了,导致后面管道发送数据失败..... 在Debug 版本下 用断点调试 看到“”MyPipe“ 管道句柄 值被更改。注意: 当刚创建完成 CreateNamedPipe ,就CloseHandle 管道句柄。 然后下一个 CreateEvent 的句柄地址 就是刚才关闭的管道句柄地址。 后面管道的ReadFile 读取Buffer 函数就会失败。  


问题2: 当多线程下管道用定时器发送数据后,Host 接受数据后,通过SendMessage 发送数据到数据处理函数时,因这个函数直到返回程序才继续往下执行。 当发送的消息处理函数 要处理大量数据时候, 导致这个函数返回时间滞后,接受数据的管道会卡住,导致主线程阻塞.....!   注意: 接收数据函数 的处理尽量小,可以把它理解成中断程序,确保它尽量短。 如果需要大量的数据处理,可以在接收数据函数中 用 PostMessage 发送消息,由专用的处理函数去处理数据。。。

提示: 以我做的这个程序为例,我在Host 端接收到数据后,处理数据函数太大(构建了不少类的对象),

                           导致函数返回滞后,主线程阻塞。

    程序的结构设计很重要,在设计之初,最好画出流程图,那些地方需要实时处理,那些地方需要处理大量数据等等!






管道流实现两个线程间通信

Java中实现多线程间的通信主要通过两种方式:共享变量和管道流。共享变量一般通过加锁的方式来保证线程的安全性,在之前的多篇博客中已提供了多个例子,这里不赘述。知道在使用锁的过程中,注意锁作用的对象以及...
  • lanxiangru
  • lanxiangru
  • 2016年12月11日 22:38
  • 799

管道和多线程

管道是内核维护的一个缓存, 它提供两个 fd, 从一个fd写入数据, 从另一个fd读出数据.  所以它是半双工的.  我在这里讨论一下如何在单进程多线程环境下使用管道. 假设一个系统里有多个生产者...
  • chengangdzzd
  • chengangdzzd
  • 2016年03月22日 20:00
  • 2623

[多线程命名管道服务器]Multithreaded Pipe Server

http://msdn.microsoft.com/en-us/library/aa365588(v=vs.85).aspx The following example is a mul...
  • MaxWoods
  • MaxWoods
  • 2014年10月21日 11:16
  • 1080

io流-多线程连接管道流

//io流-多线程连接管道流 import java.io.*;class Read implements Runnable//implements Runnable 实现Runnable接口 管道流...
  • blacop
  • blacop
  • 2016年08月01日 16:32
  • 230

【Java】线程管道通讯

很多操作系统对于管道的吹嘘往往是天花龙凤, 好心点的就贴段伪代码给你看,为出书而出书的,就直接一堆概念堆在上面,让人根本看不懂, 如此简单的概念,明明几句话就解释清楚,有的书还专门开出一章来讨论这个问...
  • yongh701
  • yongh701
  • 2015年01月20日 10:43
  • 1345

Java 多线程(五)——线程通信(共享内存、管道流、wait()、notify()等)

线程间通信方式 1 共享内存 2 管道流 Java中实现线程通信的方法 1 waitnotifynotifyAll 2 使用Condeition控制 3 使用阻塞队列BlockingQueue...
  • Zen99T
  • Zen99T
  • 2016年03月16日 22:13
  • 2161

管道流实现两个线程间通信

Java中实现多线程间的通信主要通过两种方式:共享变量和管道流。共享变量一般通过加锁的方式来保证线程的安全性,在之前的多篇博客中已提供了多个例子,这里不赘述。知道在使用锁的过程中,注意锁作用的对象以及...
  • lanxiangru
  • lanxiangru
  • 2016年12月11日 22:38
  • 799

管道通常用在两个线程间通信或进程间通信

管道,信号量,共享内存,socket的实际使用场景和NSPipe管道的使用 找了很久也没有找到NSPipe在IOS方面的常规使用()。我试了半天终于找到它的正常的使用方法,我想对很多想使用管...
  • bravegogo
  • bravegogo
  • 2016年06月01日 16:42
  • 1953

【Linux】管道模拟,线程并发拷贝程序

大连某211大学的李教授继续延续一贯的光辉传统,依旧让每一届所带的本科班写线程并发的拷贝程序。而且越来越多要求,在我读本科的时候,允许用多种语言完成这个程序,然后开始规定只允许在Linux编程。现在还...
  • yongh701
  • yongh701
  • 2016年12月26日 11:33
  • 1792

memcached源码阅读----使用libevent和多线程模型

一、libevent的使用     首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型。因此,其基...
  • benpaobagzb
  • benpaobagzb
  • 2016年06月12日 16:02
  • 1431
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于管道通信和多线程应用 调试总结...
举报原因:
原因补充:

(最多只允许输入30个字)