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

原创 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 端接收到数据后,处理数据函数太大(构建了不少类的对象),

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

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






相关文章推荐

管道和多线程

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

多线程通信——匿名管道

匿名管道方式只能实现父进程和子进程之间的通信。 匿名管道方式实现流程: 1、创建一个匿名管道,若创建成功则打开子进程 2、实现父进程的读取数据和写入数据功能 3、实现子进程的读取数据和写入数据...

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

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

Java 多线程通信之管道通信(pipe)及常见异常处理

请大家尊重劳动成果,转载请注明出处:http://blog.csdn.net/caoshichao520326/article/details/8995583     Java多线程之间要交换信息,...

uclinux多线程应用-网络通信

  • 2009年07月08日 14:52
  • 102KB
  • 下载

一个支持多线程管道服务器

  • 2008年01月31日 18:03
  • 12KB
  • 下载

Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)

一、概述       关于Socket编程的基本方法在基础篇里已经讲过,今天把它给完善了。加入了多线程,这样UI线程就不会被阻塞;实现了客户端和服务器的双向通信,只要客户端发起了连接并成功连接后...
  • pkuyjxu
  • pkuyjxu
  • 2014年04月17日 16:18
  • 7814

多线程在VC++串口通信程序中的应用

作者:赵向峰 边信黔 施小成  摘要:本文通过一机房监控系统程序中串口通信对多线程的应用来介绍 Windows 9X/NT 操作系统中多线程的应用和 VC++对多线程的支持。 关健词: 多线程,串...

Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)

一、概述       关于Socket编程的基本方法在基础篇里已经讲过,今天把它给完善了。加入了多线程,这样UI线程就不会被阻塞;实现了客户端和服务器的双向通信,只要客户端发起了连接并成功连接后那么...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于管道通信和多线程应用 调试总结...
举报原因:
原因补充:

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