我正在尝试为命名管道的读取操作设置超时。
为了从命名管道中读取数据,我使用ReadFile
功能。
我读到可以使用以下命令为此函数设置超时SetCommTimeouts
函数,但当我尝试使用它时,出现系统错误 1:“函数不正确”。
这是我的代码(这是客户端):
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
方法不应该与管道一起使用吗?还有其他方法可以让读取超时吗?
如果超时的目的是为了不卡住forever
您可以考虑致电PeekNamedPipe(...) http://msdn.microsoft.com/en-us/library/windows/desktop/aa365779%28v=vs.85%29.aspx在定时循环中。这样你就可以时不时的检查一下是否有什么东西可以读。
或者PeekNamedPipe
可以用来决定管道上的读取是否真的会得到任何东西before执行读取。这样可以避免“等待”读取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)