无法使用_beginthreadex编译C++程序

Aar*_*onP 0 c++ multithreading beginthread beginthreadex

#include <iostream>
#include <Windows.h>
#include <process.h>

//#include "windowstate.cpp"

//DWORD WINAPI MyThreadFunction( LPVOID lpParam );


using namespace std;

int Zeit;

unsigned int __stdcall wfshutdown() {
    Sleep(Zeit*60000);
    system("shutdown -s -t 2");
    return 0;
}


void shutdown() {
    cout << "When I should shut down your PC(in minutes)" << endl;
    cin >> Zeit;
    if(Zeit==0) {
        return;
    }
//  windowstate(0);


    HANDLE hThread;
    DWORD threadID;
    hThread = (HANDLE)_beginthreadex( NULL, 0, &wfshutdown, NULL, 0, &threadID );
}
Run Code Online (Sandbox Code Playgroud)

我无法运行该程序.我收到此错误,我不明白:

错误1错误C2664:'_ beginthreadex':无法将参数3从'unsigned int(__stdcall*)(void)'转换为'unsigned int(__stdcall*)(void*)'32

我在网上搜索了一个多小时未成功找到解决方案,因此我非常希望你能提供帮助.

mfo*_*ini 5

你的线程函数应该接收一个void*参数:

unsigned int __stdcall wfshutdown(void *) {
    Sleep(Zeit*60000);
    system("shutdown -s -t 2");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

遇到这种情况时,请尝试分析编译器输出.在这种情况下,它指示_beginthreadex的第三个参数应该是a unsigned int (__stdcall *)(void *),但是您使用的是类型的参数unsigned int (_stdcall *)(void).

因此,显而易见的是,预期和使用的内容之间的区别在于void*论证.