往命名管道中写数据时阻塞了如何解决?
问题:在父进程中创建命名管道后,开始写任务对象数据发现阻塞住了,不知道该如何解决?
代码如下:
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()
深入剖析命名管道FIFO对程序性能的影响
命名管道FIFO是一种简单的跨进程IPC机制,相对比共享内存,消息队列等,FIFO支持基本的VFS操作,也支持poll事件处理。因此FIFO经常被作为进程之间快捷有效的消息通知管道。比如一个高性能服务器程序,往往会生成少数进程,这些进程往往可以分为两类,一类专门负责网络消息包收发处理,一类专门负责业务逻辑处理。而这两类进程之间往往通过共享内存作为消息包的环形缓冲区,同时使用FIFO作为这两类进程的
匿名管道(Pipe)和命名管道(FIFO)
catalogue 1. pipe匿名管道 2. named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。管道是Linux支持的最初Unix IPC形式之一,具有以下特点 1. 管道是半双工的,数据只能向一个方向流动; 需要双方通信时,需要建立起两个管道 2. 只能用于父子进程或者兄弟进程之间(具有.
C# 命名管道 异步通信的例子
网上很多关于命名管道通信的代码都是同步通信的,这个例子是使用命名管道异步通信的。实现了两个Application之间利用命名管道异步通信。想了解C# 命名管道异步通信的很值得一看。


进程/线程/DLL

