相关疑难解决方法(0)

命名管道CreateFile()返回INVALID_HANDLE_VALUE,GetLastError()返回ERROR_PIPE_BUSY

我编写了一个类来处理命名管道连接,如果我创建一个实例,关闭它,然后尝试创建另一个实例调用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)

c++ winapi named-pipes

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

named-pipes ×1

winapi ×1