线程不执行功能

时间:2019-06-06 21:56:59

标签: c++ windows multithreading winapi

我编写了两个函数,它们可以通过进程的名称杀死进程。您可以指定进程的名称,程序执行后,该进程将被终止。

这两个函数运行良好,但是当我决定通过线程运行它们时,它们没有执行。以下代码有什么问题:

#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;
}

线程功能始终未启动。我不知道此线程有什么问题。我应该在这里提到,我只是较早开始使用多线程,所以这也许是一个简单的问题,但是我是线程领域的新手。

0 个答案:

没有答案