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