在 C++ 的主源文件之外使用 std::thread
Using std::thread outside main source file in c++
我正在尝试使用线程,但它在主源文件之外不起作用。
例如它不起作用
void Game::foo() {
std::cout << "Why are you not working properly";
}
void Game::threadStart() {
std::thread th(foo); //here is something wrong
}
但这行得通(在主源文件中)
void foo() {
std::cout << "I'm working properly";
}
void thread() {
std::thread th(foo);
}
此外,在主文件的第二个选项中,当我想在函数上使用指针时,它不起作用。
Resource* res = new Resource();
Pocket* pock = new Pocket();
void thread() {
std::thread th(res->product,pock); // pock is an arg of function product();
}
关于如何修复它的任何建议。在第二个代码中,我可以将指针作为参数发送,然后使用
res->product(pock)
但我认为使用两个函数使用 1 个线程 使用另一个函数是愚蠢的。
在您的游戏 class 示例中,您尝试使用 class 成员函数作为线程函数。这会起作用,但是成员函数有隐藏的 'this' 参数。
所以你需要这样的东西:
void Game::threadStart() {
std::thread th(&Game::foo, this);
}
我正在尝试使用线程,但它在主源文件之外不起作用。 例如它不起作用
void Game::foo() {
std::cout << "Why are you not working properly";
}
void Game::threadStart() {
std::thread th(foo); //here is something wrong
}
但这行得通(在主源文件中)
void foo() {
std::cout << "I'm working properly";
}
void thread() {
std::thread th(foo);
}
此外,在主文件的第二个选项中,当我想在函数上使用指针时,它不起作用。
Resource* res = new Resource();
Pocket* pock = new Pocket();
void thread() {
std::thread th(res->product,pock); // pock is an arg of function product();
}
关于如何修复它的任何建议。在第二个代码中,我可以将指针作为参数发送,然后使用
res->product(pock)
但我认为使用两个函数使用 1 个线程 使用另一个函数是愚蠢的。
在您的游戏 class 示例中,您尝试使用 class 成员函数作为线程函数。这会起作用,但是成员函数有隐藏的 'this' 参数。
所以你需要这样的东西:
void Game::threadStart() {
std::thread th(&Game::foo, this);
}