我编写了一个类来处理命名管道连接,如果我创建一个实例,关闭它,然后尝试创建另一个实例调用CreateFile()return INVALID_HANDLE_VALUE,并GetLastError()返回ERROR_PIPE_BUSY.这里发生了什么?我该怎么做才能确保电话Connect()成功?
PipeAsync A, B;
A.Connect("\\\\.\\pipe\\test",5000);
A.Close();
cout << GetLastError(); // some random value
B.Connect("\\\\.\\pipe\\test",5000);
cout << GetLastError(); // 231 (ERROR_PIPE_BUSY)
B.Close();
Run Code Online (Sandbox Code Playgroud)
这是我Connect()和的实现Close()
BOOL PipeAsync::Connect(LPCSTR pszPipeName, DWORD dwTimeout)
{
this->pszPipeName = pszPipeName;
this->fExisting = TRUE;
DWORD dwMode = this->fMessageMode ? PIPE_READMODE_MESSAGE : PIPE_READMODE_BYTE;
hPipe = CreateFile(
this->pszPipeName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if( INVALID_HANDLE_VALUE == hPipe )
return FALSE; /* set break point here ; …Run Code Online (Sandbox Code Playgroud)