Я создаю именованный канал и использую функцию для этого. Вот код:
HANDLE tProviderPipe(INVALID_HANDLE_VALUE);
SECURITY_ATTRIBUTES tSecurityAttributes;tSecurityAttributes.nLength = sizeof(tSecurityAttributes);
tSecurityAttributes.bInheritHandle = FALSE;
tSecurityAttributes.lpSecurityDescriptor = NULL;
while (1)
{
tProviderPipe = ::CreateNamedPipe(L"\\\\.\\pipe\\MyPipe",
PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
1,
128,
128,
5000,
&tSecurityAttributes); if (INVALID_HANDLE_VALUE != tProviderPipe)
{
DWORD lLastStatus(GetLastError());
OHTRACE(Trace::eTAlways, L"Pipe Status: " << (unsigned int)lLastStatus);
break;
}
if (ERROR_PIPE_BUSY != GetLastError())
{
DWORD lLastStatus(GetLastError());
OHTRACE(Trace::eTAlways, L"Pipe Status: " << (unsigned int)lLastStatus);
break;
}
if (!WaitNamedPipe(L"MyPipe", 20000))
{
DWORD lLastStatus(GetLastError());
OHTRACE(Trace::eTAlways, L"WPipe Status: " << (unsigned int)lLastStatus);
}
Когда эта функция вызывается, создание канала завершается с ошибкой с кодом 231 (т.е. канал занят). Я не понимаю, почему труба занята и как правильно создать трубу? Что должно быть после проверки и предварительной проверки, прежде чем приступить к созданию канала?