Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <conio.h>
- #include <vector>
- #include <string>
- using namespace std;
- int main()
- {
- string line = "C:\\Users\\ALBA\\Documents\\Visual Studio 2013\\Projects\\SPOVM_lab2-3\\Debug\\SPOVM_lab2-3.exe ";
- string num = "с";
- int i = 0;
- STARTUPINFOA si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- vector<PROCESS_INFORMATION*> proc_vector;
- vector<HANDLE> proc_print;
- HANDLE add = OpenEventA(EVENT_ALL_ACCESS, FALSE, "addProc");
- HANDLE del = OpenEventA(EVENT_ALL_ACCESS, FALSE, "delProc");
- HANDLE exit = OpenEventA(EVENT_ALL_ACCESS, FALSE, "exit");
- HANDLE complete = CreateEventA(NULL, TRUE, TRUE, "complete");
- do {
- if (WaitForSingleObject(exit, 0) == WAIT_OBJECT_0)
- break;
- if (WaitForSingleObject(add, 0) == WAIT_OBJECT_0) {
- PROCESS_INFORMATION* pi = new PROCESS_INFORMATION;
- ZeroMemory(pi, sizeof(PROCESS_INFORMATION));
- proc_vector.push_back(pi);
- if (!CreateProcessA(NULL,
- const_cast<char*>((line + num).c_str()),
- NULL,
- NULL,
- FALSE,
- NULL,
- NULL,
- NULL,
- &si,
- proc_vector[proc_vector.size() - 1]))
- cout << "CreateProcess failed\n";
- HANDLE print = CreateEventA(NULL, TRUE, FALSE, const_cast<char*>(num.c_str()));
- proc_print.push_back(print);
- num += "+";
- ResetEvent(add);
- }
- if (WaitForSingleObject(del, 0) == WAIT_OBJECT_0 && proc_print.size()) {
- if (WaitForSingleObject(proc_print[proc_print.size() - 1], 0) == WAIT_OBJECT_0)
- WaitForSingleObject(complete, INFINITE);
- TerminateProcess(proc_vector[proc_vector.size() - 1]->hProcess, 1);
- delete proc_vector[proc_vector.size() - 1];
- proc_vector.pop_back();
- CloseHandle(proc_print[proc_print.size() - 1]);
- proc_print.pop_back();
- }
- ResetEvent(del);
- if (WaitForSingleObject(complete, 0) == WAIT_OBJECT_0 && proc_print.size()) {
- ResetEvent(complete);
- i++;
- if (i >= proc_print.size()) i = 0;
- SetEvent(proc_print[i]);
- }
- } while (1);
- while (proc_vector.size()) {
- TerminateProcess(proc_vector[proc_vector.size() - 1]->hProcess, 1);
- delete proc_vector[proc_vector.size() - 1];
- proc_vector.pop_back();
- CloseHandle(proc_print[proc_print.size() - 1]);
- proc_print.pop_back();
- }
- CloseHandle(add);
- CloseHandle(del);
- CloseHandle(exit);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement