Не могу скомпилировать программу на C++ с _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 ответ

Решение

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

Другие вопросы по тегам