Ale*_*epe 0 c++ multithreading
我目前正在开发一个C++游戏,它应该使用多线程来处理僵尸程序实例.Bot类有一个成员函数start(),它在一个新线程中调用bot的函数walk().这是我的尝试(摘录:)
void Bot::walk(Physics& physics)
{
// do stuff
std::cout << "call to walk() function" << std::endl;
}
void Bot::start(Physics& physics)
{
std::thread m_thread(&Bot::walk, this, std::ref(physics));
m_thread.join();
}
Run Code Online (Sandbox Code Playgroud)
在另一个处理游戏初始化的类中,所有bot实例都是这样开始的:(m_bots是Bots的向量)
void Level::start()
{
// Start all Bots
for(auto it: m_bots)
{
it->start(*m_physics);
}
}
Run Code Online (Sandbox Code Playgroud)
启动时,游戏窗口照常打开,但随后继续冻结.控制台输出显示调用了walk()函数.
我错过了什么线程特定的捕获?
我希望这些摘录涵盖所有相关信息.如果不是这样,请告诉我!
加入线程阻塞直到线程完成.因此,Bot::start在它生成的线程完成之前不会返回,因此一次只能运行一个线程.
有人可能会告诉你解决方案是join()改为detach().这不是真正的解决方案,除非你的设计需要一堆自由运行的线程; 如果你关心他们什么时候完成,join()就是这样做的方式,就在那里.
一种方法是创建一个类型的对象,std::vector<std::thread>并通过调用启动所有线程Bot::start.线程运行后,您可以加入所有生成的线程.