java file read write_WriteFile / ReadFile死锁

我正在使用管道,我在WriteFile / ReadFile上遇到了一种死锁 . 这是我的代码:

hProbePipeRet = CreateNamedPipe(

"\\\\.\\pipe\\probePipeRet", // pipe name

PIPE_ACCESS_DUPLEX, // read/write access

PIPE_TYPE_MESSAGE | // message type pipe

PIPE_READMODE_MESSAGE | // message-read mode

PIPE_WAIT, // blocking mode

PIPE_UNLIMITED_INSTANCES, // max. instances

BUFSIZE, // output buffer size

BUFSIZE, // input buffer size

5, // client time-out

NULL); // default security attribute

首先我创建我的管道,然后我在另一个应用程序中使用它:

WriteFile(

hProbePipeRet, // handle to pipe

msg.c_str(), // buffer to write from

msg.size(), // number of bytes to write

&dwBytesWritten, // number of bytes written

NULL); // not overlapped I/O

然后我收到了:

fSuccess = ReadFile(

myInst->hProbePipeRet, // handle to pipe

buf, // buffer to receive data

BUFSIZE, // size of buffer

&dwBytesRead, // number of bytes read

NULL); // not overlapped I/O

这是非常基本的,我有两个管道,EXACLY做同样的事情,唯一的区别是它们在不同的线程,但我只需要这个消息的基本事务 .

在第一次尝试时,管道上的信息被成功读取,但在第二次尝试时,如果我不发送至少BUFSIZE数据,则WriteFile和ReadFile都将被阻塞 . 正如我所说,我还有两个管道做同样的事情,具有相同的功能,我不需要发送BUFSIZE数据来成功通信 .

编辑:Additionnal的相关信息

执行如下:通过pipe1向服务器发送消息,接收消息然后在我有问题的代码中使用hProbePipeRet返回数据 . 客户端读取数据,打印到屏幕上 .

另一条消息是使用pipe1调度的,收到的,结果再次出现在hProbePipeRet中,客户端正在等待至少BUFSIZE的信息,我不知道服务器在做什么,但它在WriteFile被阻止了 .

这种情况与我的其他管道相同,但我没有将hProbePipeRet放在一个单独的线程中从中读取 . 我这样做是因为我在发送消息后需要一个答案 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值