WINAPI процессы и потоки

Задание:

Создает процесс (CreateProcess), запускающий стандартный Калькулятор (calc.exe) и, в случае успеха, выводит id созданного процесса. Далее для пользователя на экран выводится меню возможных действий: если пользователь нажимает клавишу “s” поток созданного процесса приостанавливается (SuspendThread), если нажимает “r” – поток возобновляет выполнение (ResumeThread), если нажимает “t” – созданный процесс завершает свою работу (TerminateProcess). После приостановки потока убедитесь, что работа с калькулятором невозможна до тех пор, пока пользователь не возобновит выполнение. После завершения процесса не забудьте закрыть дескриптор.

#include <string.h>
#include <windows.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL,"Rus");

    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    cif.cb = sizeof(STARTUPINFO);

    PROCESS_INFORMATION pi;

    printf("\t\t ПЕРВЫЙ ПУНКТ\n");
    if (!CreateProcess("C:\\Windows\\System32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&cif,&pi))
    {
        printf("Ошибка создания процесса");
        return 1;
    }
    printf("process calc.exe\n");
    printf("processId %d \n", pi.dwProcessId);

    printf("\t 's' - приостанавливает поток\n");
    printf("\t 'r' - возобновляет поток\n");
    printf("\t 't' - процесс завершает свою работу\n");
    printf("Ваш выбор : \n");
    while(1)
    {
        char k = getchar();
        if (k == 's')
        {
            if (SuspendThread(pi.hThread))
                printf("\t поток приостановлен\n");
            else
                printf("\t ошибка приостановления потока\n");
        }
        else if (k == 'r')
        {
            if (ResumeThread(pi.hThread))
                printf("\t поток возобновлен\n");
            else
                printf("\t ошибка возобновления потока\n");
        }
        else if (k == 't')
        {
            TerminateProcess(Thread,NO_ERROR);
            printf("Поток завершил свою работу\n");
            break;
        }
    }

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}

Не работает нужным образом . Что исправить или что почитать для понимания всего этого ?


Ответы (0 шт):