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

时间:2012-03-14 14:34:10

标签: 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 );
}

我无法运行该程序。我得到了这个错误,我不明白:

  

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

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

1 个答案:

答案 0 :(得分:5)

您的线程函数应该收到void*参数:

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

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

因此,很清楚,预期和使用的内容之间的差异是void*参数。