Поток не выполняет функцию - PullRequest
1 голос
/ 07 июня 2019

Я написал две функции, которые могут убить процесс по его имени.Вы можете указать имя процесса, и после выполнения программы этот процесс будет убит.

Эти две функции работают нормально, но когда я решил запустить их через потоки, они не выполнялись.В чем проблема со следующим кодом:

#include <iostream>
#include <string>
#include <tchar.h>
#include <process.h>
#include <windows.h>
#include <tlhelp32.h>

BOOL TerminateMyProcess(DWORD dwProcessId, UINT uExitCode)
{
    DWORD dwDesiredAccess = PROCESS_TERMINATE;
    BOOL  bInheritHandle = FALSE;
    HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
    if (hProcess == NULL)
        return FALSE;

    BOOL result = TerminateProcess(hProcess, uExitCode);

    CloseHandle(hProcess);

    return result;
}

DWORD GetProcessList()
{
    HANDLE hProcessSnap;
    HANDLE hProcess;
    PROCESSENTRY32 pe32;
    DWORD dwPriorityClass;

    // Take a snapshot of all processes in the system.
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        return(FALSE);
    }

    // Set the size of the structure before using it.
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // Retrieve information about the first process,
    // and exit if unsuccessful
    if (!Process32First(hProcessSnap, &pe32))
    {
        CloseHandle(hProcessSnap);  // clean the snapshot object
        return(FALSE);
    }

    // Now walk the snapshot of processes 
    do
    {
        std::string str(pe32.szExeFile);

        if (str == "notepad.exe") // put the name of your process you want to kill
        {
            TerminateMyProcess(pe32.th32ProcessID, 1);
        }
    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);
    return(TRUE);
}

DWORD WINAPI ThreadingOne(LPVOID arg_param) {
    return GetProcessList();
}

auto main(int argc, const char* argv[]) -> decltype(0)
{
    DWORD ThreadId;
    HANDLE ThreadHandle = CreateThread(NULL, 0, ThreadingOne, (LPVOID)0, CREATE_SUSPENDED, &ThreadId);
    ResumeThread(ThreadHandle);
    return 0;
}

Функция потока все равно не запустилась.Я не знал, что это за ошибка с этим потоком.Я должен упомянуть здесь, я только начал многопоточность ранее, так что, возможно, это простой вопрос, но я новичок в мире потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...