void Game::game() { _beginthread(&Game::key_thread, 0, this); _beginthread(&Game::timer_thread, 0, this); Sleep(10000000000000000000); }“(void(__cdecl Game::*)(void*), int, Game*)”请问这种问题应该怎么修改
时间: 2024-02-26 12:56:31 浏览: 88
解决error C2065: '_beginthreadex' :undeclared identifier
5星 · 资源好评率100%
这个问题涉及到线程函数的类型转换和参数传递方式。建议修改如下:
1. 将线程函数的声明改为静态函数,并添加一个参数void*,该参数可以用来传递当前对象的指针,如下所示:
```
static void* key_thread(void* arg);
static void* timer_thread(void* arg);
```
2. 在启动线程时,使用类型转换将成员函数指针转换为静态函数指针,并将当前对象的指针作为参数传递给线程函数,如下所示:
```
_beginthread(&Game::key_thread, 0, static_cast<void*>(this));
_beginthread(&Game::timer_thread, 0, static_cast<void*>(this));
```
3. 在线程函数中,将void*类型的参数转换为当前对象的指针,并使用该指针调用成员函数,如下所示:
```
void* Game::key_thread(void* arg) {
Game* game = static_cast<Game*>(arg);
game->handle_key();
return nullptr;
}
void* Game::timer_thread(void* arg) {
Game* game = static_cast<Game*>(arg);
game->update_timer();
return nullptr;
}
```
这样修改后,应该能够正确地启动线程,并调用对应的成员函数。
阅读全文