2012-03-14 121 views
0
#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); 
} 

我无法运行该程序。我得到这个错误,我不明白:无法使用_beginthreadex编译C++程序

错误1个错误C2664: '_beginthreadex':无法从 '无符号整型(__stdcall *)(无效)' 转换参数3为“无符号整型(__stdcall *) (无效*)“32

我unseccessfully在网上搜索了一个多小时才找到一个解决方案,因此 我很希望能帮到你。

回答

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*参数的差异。

+0

+1 esp。了解如何使用编译器输出。正是在这种情况下,你应该停下来,看看编译器试图告诉你什么。 – daramarak 2012-03-14 14:46:51