Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  alpha
Language: C/C++
Code:
#include <windows.h>
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    HANDLE hMutex;
    LPCWSTR lpszAppName = TEXT("C:\\Users\\hitma\\OneDrive\\ROOT\\SPSUT\\OPERATING SYSTEMS\\LAB\\WORK_8\\meta\\01\\app1.exe");
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    // создаем мьютекс
    hMutex = CreateMutex(nullptr, FALSE, TEXT("DemoMutex"));
    if (hMutex == nullptr)
    {
        printf("CreateMutex error: %d\n", static_cast<int>(GetLastError()) );
        printf("\nPress any key to exit.");
        cin.get();
        return 0;
    }
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    // создаем новый консольный процесс
    if (!CreateProcess(lpszAppName, nullptr, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi))
    {
        cout << "The new process is not created." << endl;
        cout << "Press any key to exit." << endl;
        cin.get();
        return GetLastError();
    }
    // выводим на экран строки
    for (int j = 0; j < 10; j++)
    {
        // захватываем мьютекс
        WaitForSingleObject(hMutex, INFINITE);
        for (int i = 0; i < 10; i++)
        {
            cout << j << ' ';
            cout.flush();
            Sleep(10);
        }
        cout << endl;
        // освобождаем мьютекс
        ReleaseMutex(hMutex);
    }
    // закрываем дескриптор мьютекса
    CloseHandle(hMutex);
    // ждем пока дочерний процесс закончит работу
    WaitForSingleObject(pi.hProcess, INFINITE);
    // закрываем дескрипторы дочернего процесса в текущем процессе
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    return 0;
}
Comments: