2012-03-14 127 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