Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Кол-во процессов
- const int proccesCount = 4;
- //Моя функция по отправке в pipe. Просто так удобнее
- BOOL SendPipe(HANDLE &pipe, int action)
- {
- DWORD numBytesWritten = 0;
- return WriteFile(
- pipe, //handle именного pipe
- &action, //данные для передачи
- sizeof(int), //длина данных (в байтах)
- &numBytesWritten, //действительное кол-во байт для хранения
- NULL //не использовать overlapped I/O
- );
- }
- int main(int argc, const char** argv)
- {
- //---Всякий код---//
- STARTUPINFO si[proccesCount];
- PROCESS_INFORMATION pi[proccesCount];
- //Создаем pipe под кол-во потоков
- HANDLE pipe[proccesCount];
- for (int i = 0; i < proccesCount; i++)
- {
- pipe[i] = CreateNamedPipe(
- L"\\\\.\\pipe\\laba", //имя pipe
- PIPE_ACCESS_OUTBOUND, //pipe только на отправку
- PIPE_TYPE_BYTE, //тип передачи данных - byte stream
- proccesCount, //Макс. кол-во соединений
- 0, //нет буфера на выход
- 0, //нет буфера на вход
- 0, //стандартное время ожидания
- NULL //стандартные security attributes
- );
- }
- //Создаем процессы и открываем для них pipe
- for (int i = 0; i < proccesCount; i++)
- {
- ZeroMemory(&si[i], sizeof(STARTUPINFO));
- si[i].cb = sizeof(STARTUPINFO);
- ZeroMemory(&pi[i], sizeof(PROCESS_INFORMATION));
- GetStartupInfo(&si[i]);
- if (!CreateProcess(path, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si[i], &pi[i]))
- {
- cout << "Ошибка создания " << i + 1 << " процесса клиента!" << endl;
- system("pause");
- return 1;
- }
- if (!ConnectNamedPipe(pipe[i], NULL)) {
- cout << "Ошибка подключения pipe к клиенту." << endl;
- system("pause");
- return 1;
- }
- }
- //Далее основная логика по варианту
- //---Всякий код---//
- //Отправка значения (в ch) всем клиентам
- for (int i = 0; i < proccesCount; i++)
- {
- if (!SendPipe(pipe[i], ch))
- {
- cout << "Проблема при отправке данных " << i + 1 << " клиенту." << endl;
- system("pause");
- return 1;
- }
- }
- //---Всякий код---//
- //Закрываем pipe в конце проги
- for (int i = 0; i < proccesCount; i++)
- {
- DisconnectNamedPipe(pipe[i]);
- CloseHandle(pipe[i]);
- }
- //CloseHandle(hMutex);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement