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

そのプログラムを実行できません。このエラーが表示されますが、理解できません:

エラー 1 エラー C2664: '_beginthreadex': パラメーター 3 を 'unsigned int (__stdcall *)(void)' から 'unsigned int (__stdcall *)(void *)'32 に変換できません

解決策を見つけるために Web を 1 時間以上検索しました。

4

1 に答える 1

5

スレッド関数はvoid*引数を受け取る必要があります。

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

このような状況に直面したときは、コンパイラの出力を分析してみてください。この場合、 _beginthreadex の 3 番目のパラメーターは である必要があることを示してunsigned int (__stdcall *)(void *)いますが、 type の引数を使用していますunsigned int (_stdcall *)(void)

したがって、期待されるものと使用したものの違いがvoid*議論であることは明らかです。

于 2012-03-14T14:35:15.787 に答える