Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <iostream>
- #include <Windows.h>
- #include <locale.h>
- using namespace std;
- #define BUF_SIZE 256
- #define _CRT_SECURE_NO_WARNINGS
- TCHAR szName[] = TEXT("MyFileMappingObject");
- TCHAR szNameSecond[] = TEXT("MyFileMappingObjectSecond");
- TCHAR szMsg[] = TEXT("10");
- void Mythread(PROCESS_INFORMATION myTh)
- {
- srand(time(NULL));
- double t = 1000 + rand() % 2000;
- ResumeThread(myTh.hThread);
- Sleep(t);
- SuspendThread(myTh.hThread);
- }
- DWORD WINAPI mainThread()
- {
- // Zadanie peremennyh
- STARTUPINFO si; // struktura s informaciej o zapuske processa
- PROCESS_INFORMATION pi[2]; // struktura s informaciej o 2 processah
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- HANDLE hMapFile; // mapping file handle
- LPCTSTR pBuf; // ukazatel' na nachal'nyj adres
- TCHAR *ProcessName = new TCHAR;
- bool flag = true, flag2 = true;
- // sozdanie, zapusk i unichtozhenie 2h processov
- mbstowcs(ProcessName, "C:\\Users\\Username\\os2\\OsLab2FProc\\Debug\\OsLab2FProc.exe", 250);
- if (!CreateProcess(ProcessName,
- NULL,
- NULL,
- NULL,
- FALSE,
- CREATE_NEW_CONSOLE,
- NULL,
- NULL,
- &si,
- &pi[0])
- )
- printf("CreateProcess failed, error - %d.\n", GetLastError());
- SuspendThread(pi[0].hThread);
- mbstowcs(ProcessName, "C:\\Users\\Username\\os2\\OsLab2SProc\\Debug\\OsLab2SProc.exe", 250);
- if (!CreateProcess(ProcessName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi[1]))
- printf("CreateProcess failed, error - %d.\n", GetLastError());
- SuspendThread(pi[1].hThread);
- for (int i = 0; i < 3; i++) // zaderzhki mezhdu iteracijami u odnogo potoka net, ona voznikaet tol'ko pri zapuske vtorogo
- {
- // pervyj potok
- if (flag == true)
- {
- Mythread(pi[0]);
- hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);
- if (hMapFile == NULL)
- {
- printf("Can not open file mapping object (%d).\n", GetLastError());
- _getch();
- return 1;
- }
- pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
- if (pBuf == NULL)
- {
- printf("Presentation of the file can not be projected (%d).\n", GetLastError());
- _getch();
- CloseHandle(hMapFile);
- return 1;
- }
- if (lstrcmp(pBuf, szMsg) == 0)
- {
- TerminateProcess(pi[0].hProcess, 0);
- UnmapViewOfFile(pBuf);
- CloseHandle(hMapFile);
- flag = false;
- }
- }
- // vtoroj potok
- if (flag2 == true)
- {
- Mythread(pi[1]);
- hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szNameSecond);
- if (hMapFile == NULL)
- {
- printf("Can not open file mapping object (%d).\n", GetLastError());
- _getch();
- return 1;
- }
- pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
- if (pBuf == NULL)
- {
- printf("Presentation of the file can not be projected (%d).\n", GetLastError());
- _getch();
- CloseHandle(hMapFile);
- return 1;
- }
- if (lstrcmp(pBuf, szMsg) == 0)
- {
- TerminateProcess(pi[1].hProcess, 0);
- UnmapViewOfFile(pBuf);
- CloseHandle(hMapFile);
- flag2 = false;
- }
- }
- }
- if (pi[0].hProcess != NULL) TerminateProcess(pi[0].hProcess, 0);
- if (pi[1].hProcess != NULL) TerminateProcess(pi[1].hProcess, 0);
- // zakrytie deskriptorov processov i potokov.
- CloseHandle(pi[0].hProcess);
- CloseHandle(pi[0].hThread);
- CloseHandle(pi[1].hProcess);
- CloseHandle(pi[1].hThread);
- return 0;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- HANDLE mT = CreateThread(NULL, 0, LPTHREAD_START_ROUTINE(&mainThread), 0, 0, 0);
- WaitForSingleObject(mT,INFINITE);
- CloseHandle(mT);
- return 0;
- }
Add Comment
Please, Sign In to add comment