#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
我在网上搜索了一个多小时未成功找到解决方案, 因此,我非常希望你能提供帮助。
答案 0 :(得分: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*
参数。