Advertisement
albaSANDROS

2nd

Mar 15th, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     string line = "C:\\Users\\ALBA\\Documents\\Visual Studio 2013\\Projects\\SPOVM_lab2-3\\Debug\\SPOVM_lab2-3.exe ";
  12.     string num = "с";
  13.     int i = 0;
  14.  
  15.     STARTUPINFOA si;
  16.     ZeroMemory(&si, sizeof(si));
  17.     si.cb = sizeof(si);
  18.  
  19.     vector<PROCESS_INFORMATION*> proc_vector;
  20.     vector<HANDLE> proc_print;
  21.  
  22.     HANDLE add = OpenEventA(EVENT_ALL_ACCESS, FALSE, "addProc");
  23.     HANDLE del = OpenEventA(EVENT_ALL_ACCESS, FALSE, "delProc");
  24.     HANDLE exit = OpenEventA(EVENT_ALL_ACCESS, FALSE, "exit");
  25.     HANDLE complete = CreateEventA(NULL, TRUE, TRUE, "complete");
  26.  
  27.     do {
  28.  
  29.         if (WaitForSingleObject(exit, 0) == WAIT_OBJECT_0)
  30.             break;
  31.  
  32.         if (WaitForSingleObject(add, 0) == WAIT_OBJECT_0) {
  33.             PROCESS_INFORMATION* pi = new PROCESS_INFORMATION;
  34.             ZeroMemory(pi, sizeof(PROCESS_INFORMATION));
  35.             proc_vector.push_back(pi);
  36.  
  37.             if (!CreateProcessA(NULL,
  38.                 const_cast<char*>((line + num).c_str()),
  39.                 NULL,
  40.                 NULL,
  41.                 FALSE,
  42.                 NULL,
  43.                 NULL,
  44.                 NULL,
  45.                 &si,
  46.                 proc_vector[proc_vector.size() - 1]))
  47.                 cout << "CreateProcess failed\n";
  48.  
  49.             HANDLE print = CreateEventA(NULL, TRUE, FALSE, const_cast<char*>(num.c_str()));
  50.             proc_print.push_back(print);
  51.             num += "+";
  52.             ResetEvent(add);
  53.         }
  54.  
  55.         if (WaitForSingleObject(del, 0) == WAIT_OBJECT_0 && proc_print.size()) {
  56.             if (WaitForSingleObject(proc_print[proc_print.size() - 1], 0) == WAIT_OBJECT_0)
  57.                 WaitForSingleObject(complete, INFINITE);
  58.             TerminateProcess(proc_vector[proc_vector.size() - 1]->hProcess, 1);
  59.             delete proc_vector[proc_vector.size() - 1];
  60.             proc_vector.pop_back();
  61.  
  62.             CloseHandle(proc_print[proc_print.size() - 1]);
  63.             proc_print.pop_back();
  64.         }
  65.         ResetEvent(del);
  66.  
  67.         if (WaitForSingleObject(complete, 0) == WAIT_OBJECT_0 && proc_print.size()) {
  68.             ResetEvent(complete);
  69.  
  70.             i++;
  71.             if (i >= proc_print.size()) i = 0;
  72.  
  73.             SetEvent(proc_print[i]);
  74.         }
  75.  
  76.     } while (1);
  77.  
  78.     while (proc_vector.size()) {
  79.         TerminateProcess(proc_vector[proc_vector.size() - 1]->hProcess, 1);
  80.         delete proc_vector[proc_vector.size() - 1];
  81.         proc_vector.pop_back();
  82.  
  83.         CloseHandle(proc_print[proc_print.size() - 1]);
  84.         proc_print.pop_back();
  85.     }
  86.  
  87.     CloseHandle(add);
  88.     CloseHandle(del);
  89.     CloseHandle(exit);
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement