gpt4 book ai didi

c++ - 命名管道读取超时

转载 作者:可可西里 更新时间:2023-11-01 14:38:34 25 4
gpt4 key购买 nike

我正在尝试为命名管道的读取操作设置超时。
为了从命名管道读取数据,我使用了 ReadFile 函数。
我了解到可以使用 SetCommTimeouts 函数为此函数设置超时,但是当我尝试使用它时,出现系统错误 1:“Incorrect function”。
这是我的代码(这是客户端):

m_pipe = CreateFileA(pipeName,   // pipe name 
GENERIC_READ | // read and write access
GENERIC_WRITE,
0, // no sharing
NULL, // default security attributes
OPEN_EXISTING, // opens existing pipe
0, // default attributes
NULL); // no template file

if (m_pipe != INVALID_HANDLE_VALUE)
{
DWORD mode = PIPE_READMODE_MESSAGE | PIPE_WAIT;
ok = SetNamedPipeHandleState(m_pipe, &mode, NULL, NULL);
COMMTIMEOUTS cto;
cto.ReadTotalTimeoutConstant = 1000;
BOOL time = SetCommTimeouts(m_pipe, &cto);
}

我是不是做错了什么,或者 SetCommTimeouts 方法不应该与管道一起使用?有没有其他方法可以让读取超时?

最佳答案

如果超时的目的是避免卡住永远,您可以考虑调用PeekNamedPipe(...)。在定时循环中。这样你就可以时不时查看一下有没有什么可读的。或者,PeekNamedPipe 可用于确定管道上的读取是否会在执行读取之前 实际获取任何内容。这样可以避免“等待”读取。

关于c++ - 命名管道读取超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com