Не удается скомпилировать программу на C ++ с _beginthreadex - PullRequest
0 голосов
/ 14 марта 2012
#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 Ответ

5 голосов
/ 14 марта 2012

Ваша функция потока должна получить аргумент 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*.

...