Я разрабатываю инструмент трубной связи с VS2010 на Win10 x64.
Я создал PIPE
, используя CreateNamedPipe(L"blablabla",...)
, и это PIPE - SERVER
. Затем я жду соединения PIPE - CLIENT
, используя ConnectNamedPipe(handle)
.
Проблема возникает здесь, потому что я уверен, что не может перейти на линию ConnectNamedPipe(handle)
для ожидания подключения клиента.
Для решения этой проблемы я просто создал поток, который ожидает клиентского соединения.
После CreateThread(....)
тогда я могу разорвать блок и подключиться к трубе.
Простая реализация здесь, а не полный код.
DWORD WINAPI _thread_pipe_server_(LPVOID lPvoid)
{
//--------------------------- Step - 01 ---------------------------------
g_pipe_handle = CreateNamedPipe(g_pipe_name,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES, MAX_PIPE_BUFFER_SIZE, MAX_PIPE_BUFFER_SIZE,
g_pipe_time, 0);
if (INVALID_HANDLE_VALUE != g_pipe_handle)
{
ConnectNamedPipe(g_pipe_handle, 0);
// Sending and receiving data...
// --- >
// < ---
DisconnectNamedpipe(g_pipe_handle);
}
return ERROR_PROCESS;
}
int main()
{
HANDLE h_pipe_server = CreateThread(0, 0, _thread_pipe_server_, 0, 0, 0);
if (INVALID_HANDLE_VALUE != h_pipe_server)
{
//--------------------------- Step - 02 ---------------------------------
HANDLE h_pipe_client = CreateFile(g_pipe_name, GENERIC_ALL, 0, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE != h_pipe_client)
{
// Receiving and sending data...
// < ---
// --- >
CloseHandle(h_pipe_client);
}
}
}
Как я уже сказал, я использую Win10 x64, и он работает хорошо.
НО НА WIN7 Step - 01
не обрабатывается быстрее, чем Step - 02
.
Таким образом, h_pipe_client
не может быть допустимым значением, поскольку Step - 01
еще не обработано. Как я всегда могу запустить Step - 01
отца, чем Step - 02
?