关于管道通信和多线程应用 调试总结...
2016-05-31 11:58
316 查看
关于管道通信和多线程应用 调试总结...
最近我做了一个Named Pipe 同学示例程序,在调试的过程中 遇到若干问题,现在简单总结一下 :
首先简单介绍一下,给予MFC 单文档应用程序,两个独立的小项目,暂且把这两个项目定义为 MASTER , 和SLAVE 每个项目中各自创建一个 命名管道,作为服务器端;再分别在客户端客户端创建打开对方的管道,接受连接,做握手通讯,表示管道连接成功。 然后Master 端发起命令,Slave端接受到命令,做定时发送数据,由Maser 端接收数据;
如下图 :
![](http://img.blog.csdn.net/20160531134355315?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
问题1.
管道在建立的时候 主管道句柄 被提前关闭了,导致后面管道发送数据失败..... 在Debug 版本下 用断点调试 看到“”MyPipe“ 管道句柄 值被更改。注意: 当刚创建完成 CreateNamedPipe ,就CloseHandle 管道句柄。 然后下一个 CreateEvent 的句柄地址 就是刚才关闭的管道句柄地址。 后面管道的ReadFile 读取Buffer 函数就会失败。
问题2: 当多线程下管道用定时器发送数据后,Host 接受数据后,通过SendMessage 发送数据到数据处理函数时,因这个函数直到返回程序才继续往下执行。 当发送的消息处理函数 要处理大量数据时候, 导致这个函数返回时间滞后,接受数据的管道会卡住,导致主线程阻塞.....!
注意: 接收数据函数 的处理尽量小,可以把它理解成中断程序,确保它尽量短。 如果需要大量的数据处理,可以在接收数据函数中 用 PostMessage 发送消息,由专用的处理函数去处理数据。。。
提示: 以我做的这个程序为例,我在Host 端接收到数据后,处理数据函数太大(构建了不少类的对象),
导致函数返回滞后,主线程阻塞。
程序的结构设计很重要,在设计之初,最好画出流程图,那些地方需要实时处理,那些地方需要处理大量数据等等!
最近我做了一个Named Pipe 同学示例程序,在调试的过程中 遇到若干问题,现在简单总结一下 :
首先简单介绍一下,给予MFC 单文档应用程序,两个独立的小项目,暂且把这两个项目定义为 MASTER , 和SLAVE 每个项目中各自创建一个 命名管道,作为服务器端;再分别在客户端客户端创建打开对方的管道,接受连接,做握手通讯,表示管道连接成功。 然后Master 端发起命令,Slave端接受到命令,做定时发送数据,由Maser 端接收数据;
如下图 :
问题1.
管道在建立的时候 主管道句柄 被提前关闭了,导致后面管道发送数据失败..... 在Debug 版本下 用断点调试 看到“”MyPipe“ 管道句柄 值被更改。注意: 当刚创建完成 CreateNamedPipe ,就CloseHandle 管道句柄。 然后下一个 CreateEvent 的句柄地址 就是刚才关闭的管道句柄地址。 后面管道的ReadFile 读取Buffer 函数就会失败。
问题2: 当多线程下管道用定时器发送数据后,Host 接受数据后,通过SendMessage 发送数据到数据处理函数时,因这个函数直到返回程序才继续往下执行。 当发送的消息处理函数 要处理大量数据时候, 导致这个函数返回时间滞后,接受数据的管道会卡住,导致主线程阻塞.....!
注意: 接收数据函数 的处理尽量小,可以把它理解成中断程序,确保它尽量短。 如果需要大量的数据处理,可以在接收数据函数中 用 PostMessage 发送消息,由专用的处理函数去处理数据。。。
提示: 以我做的这个程序为例,我在Host 端接收到数据后,处理数据函数太大(构建了不少类的对象),
导致函数返回滞后,主线程阻塞。
程序的结构设计很重要,在设计之初,最好画出流程图,那些地方需要实时处理,那些地方需要处理大量数据等等!
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- MFC之ComboBox控件用法实例教程
- MFC绘制不规则窗体的方法
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- MFC实现全屏功能代码实例
- 使用VS2010创建MFC ActiveX工程项目
- C++中MFC Tab Control控件的使用详解
- MFC程序设计常用技巧汇总
- MFC扩展DLL中导出类和对话框的实现方法
- VC中SDK与MFC的区别浅析
- 浅谈MFC 改变控件大小和位置
- VC MFC非模态对话框的实现方法