Advertisement
Guest User

123

a guest
Mar 29th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Кол-во процессов
  2. const int proccesCount = 4;
  3. //Моя функция по отправке в pipe. Просто так удобнее
  4. BOOL SendPipe(HANDLE &pipe, int action)
  5. {
  6.     DWORD numBytesWritten = 0;
  7.     return WriteFile(
  8.         pipe,                               //handle именного pipe
  9.         &action,                            //данные для передачи
  10.         sizeof(int),                        //длина данных (в байтах)
  11.         &numBytesWritten,                   //действительное кол-во байт для хранения
  12.         NULL                                //не использовать overlapped I/O
  13.     );
  14. }
  15.  
  16. int main(int argc, const char** argv)
  17. {
  18.     //---Всякий код---//
  19.     STARTUPINFO si[proccesCount];
  20.     PROCESS_INFORMATION pi[proccesCount];
  21.     //Создаем pipe под кол-во потоков
  22.     HANDLE pipe[proccesCount];
  23.     for (int i = 0; i < proccesCount; i++)
  24.     {
  25.         pipe[i] = CreateNamedPipe(
  26.             L"\\\\.\\pipe\\laba",   //имя pipe
  27.             PIPE_ACCESS_OUTBOUND,   //pipe только на отправку
  28.             PIPE_TYPE_BYTE,         //тип передачи данных - byte stream
  29.             proccesCount,           //Макс. кол-во соединений
  30.             0,                      //нет буфера на выход
  31.             0,                      //нет буфера на вход
  32.             0,                      //стандартное время ожидания
  33.             NULL                    //стандартные security attributes
  34.         );
  35.     }
  36.     //Создаем процессы и открываем для них pipe
  37.     for (int i = 0; i < proccesCount; i++)
  38.     {
  39.         ZeroMemory(&si[i], sizeof(STARTUPINFO));
  40.         si[i].cb = sizeof(STARTUPINFO);
  41.         ZeroMemory(&pi[i], sizeof(PROCESS_INFORMATION));
  42.         GetStartupInfo(&si[i]);
  43.         if (!CreateProcess(path, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si[i], &pi[i]))
  44.         {
  45.             cout << "Ошибка создания " << i + 1 << " процесса клиента!" << endl;
  46.             system("pause");
  47.             return 1;
  48.         }
  49.         if (!ConnectNamedPipe(pipe[i], NULL)) {
  50.             cout << "Ошибка подключения pipe к клиенту." << endl;
  51.             system("pause");
  52.             return 1;
  53.         }
  54.     }
  55.     //Далее основная логика по варианту
  56.     //---Всякий код---//
  57.         //Отправка значения (в ch) всем клиентам
  58.         for (int i = 0; i < proccesCount; i++)
  59.         {
  60.             if (!SendPipe(pipe[i], ch))
  61.             {
  62.                 cout << "Проблема при отправке данных " << i + 1 << " клиенту." << endl;
  63.                 system("pause");
  64.                 return 1;
  65.             }
  66.         }
  67.     //---Всякий код---//
  68.     //Закрываем pipe в конце проги
  69.     for (int i = 0; i < proccesCount; i++)
  70.     {
  71.         DisconnectNamedPipe(pipe[i]);
  72.         CloseHandle(pipe[i]);
  73.     }
  74.     //CloseHandle(hMutex);
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement