往命名管道中写数据时阻塞了如何解决?

幸福官 2014-06-05 11:45:36
目的:现在工作上有个任务要在父进程中创建一个命名管道,往管道中写任务对象数据,然后创建多个子进程,让子进程从命名管道中取任务去执行。
问题:在父进程中创建命名管道后,开始写任务对象数据发现阻塞住了,不知道该如何解决?
代码如下:

HANDLE hPipe;
hPipe = CreateNamedPipe(TEXT("\\\\.\\Pipe\\taskqueue"),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT ,
PIPE_UNLIMITED_INSTANCES,
0,
0,
NMPWAIT_USE_DEFAULT_WAIT,
0);//创建了一个命名管道
if( INVALID_HANDLE_VALUE == hPipe)
{
printf("Error create/open pipe");
}
else
{
if(WaitNamedPipe(TEXT("\\\\.\\Pipe\\taskqueue"), NMPWAIT_WAIT_FOREVER)) //连接命名管道
{
hPipe=CreateFile(L"\\\\.\\pipe\\taskqueue", GENERIC_READ| GENERIC_WRITE,0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); //打开指定命名管道
if(hPipe==INVALID_HANDLE_VALUE)
{
printf("打开命名管道失败\r\n");
}
else
{
//
TaskStruct taskRead = {0};
DWORD wlen=0;
wchar_t buf[256];
ReadFile(hPipe,&taskRead,sizeof(TaskStruct),&wlen,NULL);
//
TaskStruct task = {0};
task.handle = 1;
strcpy(task.dwgSrcPath, "F:\\test\\111.dwg");
strcpy(task.dwgDstPath, "F:\\test\\222.dwg");
task.iDwgVer = 0;
task.TaskStatus = DWG_TASK_COMMIT;
strcpy(task.urlsource, "192.168.0.62\\showInfo.php");

if(WriteFile(hPipe,&task,sizeof(TaskStruct),&wlen,0))
{
printf("数据写入成功\r\n"); //提示信息
}
else
{
printf("数据写入失败\r\n");
}
}
}
else
{
printf("连接命名管道失败\r\n"); //提示信息
}
CloseHandle(hPipe);
}
...全文
376 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸福官 2014-06-06
  • 打赏
  • 举报
回复
没人能指教一下吗?

15,471

社区成员

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

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