关于管道操作的一些疑问

Volftooth 2012-09-17 11:52:06
1、看过一些代码、在 CreatePipe 后就关闭了写句柄或者读句柄、为什么要关闭?、关闭了不就不能让 CMD 通过写句柄向管道中写数据了么?、或者不能从管道中读数据、

2、我想让 CMD 中的回显信息分行显示、这样我就不得不格式化接收到的字符、判断\r\n、然后显示、这样就有一个问题、我并不知道 CMD 信息中从哪里开始有 \r\n、并且这种流式数据可能并不是完整的、有时需要拼合、我目前的做法是一个字符一个字符的读、边判断边合并成一个整句然后输出、但这样速度不够、导致状态栏只显示最后一条信息、有什么其它办法么?、
上一段代码、

do
{
ReadFile(read_pipe, &data, 1, &read_size, 0);
show_data[show_data_usage++] = data;
if(data == '\n')
{
show_data[show_data_usage] = 0;
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, show_data, show_data_usage + 1, show_data_uni, 128);
update_info_text(show_data_uni);
show_data_usage = 0;
show_data[0] = 0;
}
PeekNamedPipe(read_pipe, NULL, 0, NULL, &read_size, NULL);
}while(read_size);


3、我用纯 SDK 和 C 写对话模式程序、状态栏的信息更新是发送 SB_SETTEXT 来实现的、这个消息的反映速度怎么样?、看 MSDN 中是需要控件通过 WM_PAINT 来响应、如果我在发送 SB_SETTEXT 后向状态栏窗口发送一个 UpdateWindow 会不会更快些?、

4、VS2012 什么时候才出支持目标系统 XP 的补丁包啊、不想装两个 VS.......

为什么最多只能给 80 分.......
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-09-18
  • 打赏
  • 举报
回复
句柄关闭了,一样可以用
内核对象的句柄关闭了,只是说明你对它不感兴趣了;
就像创建进程返回的句柄一样,你关闭了,进程一样的执行
Volftooth 2012-09-18
  • 打赏
  • 举报
回复
你没明白我的意思、我是从 CMD 中读数据、显示在状态栏中、但状态栏一次只能显示一行、所以有分行显示、就是从流数据中截一行数据显示在状态栏中、[Quote=引用 3 楼 的回复:]

CreatePipe 创建之后,如果不用了之后才CloseHandle,这样是最安全了!(你看到的那些代码都是有
问题的代码)
2对于第二点,读了什么数据就写什么数据,如果原数据中有\r\n的话,CMD会自动换行,
3.直接发送可立即更新
[/Quote]
Gloveing 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
但是我试过在程序中 CreateProcess 后关闭管道写句柄、程序就没有输出了、是空白、

引用 1 楼 的回复:

句柄关闭了,一样可以用
内核对象的句柄关闭了,只是说明你对它不感兴趣了;
就像创建进程返回的句柄一样,你关闭了,进程一样的执行
[/Quote]
你得是在你不用其句柄的时候在关闭;
如果你都还要使用句柄,暂时不要关闭
贪玩的老鼠 2012-09-18
  • 打赏
  • 举报
回复
CreatePipe 创建之后,如果不用了之后才CloseHandle,这样是最安全了!(你看到的那些代码都是有
问题的代码)
2对于第二点,读了什么数据就写什么数据,如果原数据中有\r\n的话,CMD会自动换行,
3.直接发送可立即更新
Volftooth 2012-09-18
  • 打赏
  • 举报
回复
但是我试过在程序中 CreateProcess 后关闭管道写句柄、程序就没有输出了、是空白、[Quote=引用 1 楼 的回复:]

句柄关闭了,一样可以用
内核对象的句柄关闭了,只是说明你对它不感兴趣了;
就像创建进程返回的句柄一样,你关闭了,进程一样的执行
[/Quote]

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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