双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

幸福官 幸福官 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
目的:现在工作上有个任务要在父进程中创建一个命名管道,往管道中写任务对象数据,然后创建多个子进程,让子进程从命名管道中取任务去执行。
问题:在父进程中创建命名管道后,开始写任务对象数据发现阻塞住了,不知道该如何解决?
代码如下:

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);
}
...全文

相关推荐

管道通信实例(阻塞管道)

Windows下实现的C++管道通信,PipeTest是服务器端,Test里是客户端,从服务器端读入一个文件(test.txt),客户端将文件内容打印出来。

凯佰赫-战盾

FIFO管道/命名管道(半双工)

特点: 可以是非亲缘进程之间; 读写必须同时进行,否则阻塞。 创建命名管道: int mkfifo(pathname,mode); 参数: pathname: 文件路径(文件必须不存在)。 mode: 模式。 返回值: 0 成功 非0 失败 创建FIFO管道代码: #include #include #include #include int main()

C后台开发从入门到就业

深入剖析命名管道FIFO对程序性能的影响

命名管道FIFO是一种简单的跨进程IPC机制,相对比共享内存,消息队列等,FIFO支持基本的VFS操作,也支持poll事件处理。因此FIFO经常被作为进程之间快捷有效的消息通知管道。比如一个高性能服务器程序,往往会生成少数进程,这些进程往往可以分为两类,一类专门负责网络消息包收发处理,一类专门负责业务逻辑处理。而这两类进程之间往往通过共享内存作为消息包的环形缓冲区,同时使用FIFO作为这两类进程的

edenhuang

匿名管道(Pipe)和命名管道(FIFO)

catalogue 1. pipe匿名管道 2. named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。管道是Linux支持的最初Unix IPC形式之一,具有以下特点 1. 管道是半双工的,数据只能向一个方向流动; 需要双方通信时,需要建立起两个管道 2. 只能用于父子进程或者兄弟进程之间(具有.

与未来同行

C# 命名管道 异步通信的例子

网上很多关于命名管道通信的代码都是同步通信的,这个例子是使用命名管道异步通信的。实现了两个Application之间利用命名管道异步通信。想了解C# 命名管道异步通信的很值得一看。

king19830101
评论 1
收藏 已收藏
分享
返回顶部
幸福官
进程/线程/DLL 15,466 成员 49,169 内容