调用 std::async 的效率如何?它可以用来在游戏循环中发布任务吗?
我希望我所有的输入检测都在一个单独的线程上,并在我的主线程的游戏循环中的某个点同步,以便我可以轮询输入。
我能想到的唯一方法是拆分我的输入检测任务,并在实际游戏循环开始时使用 std::async
调用它们,然后调用 wait()
稍后在循环中同步数据,但我希望循环的每次迭代都有相同的行为,所以这个调用一定很昂贵......
是这样吗?
最佳答案
假设它写得很好,那么 std::async(std::launch::async, ...)
应该不会比小堆分配和构造一个 std 更昂贵: :线程
。如果创建一个新的 std::thread
来完成工作对你来说足够高效,那么 std::async
就足够高效了,但会省去你编写同步将结果返回到主线程。
如果为每个工作创建一个新的 std::thread
是不合适的,那么 std::async
可能也不合适。
(注意,除非您指定 std::launch::async
作为启动策略,否则无法保证任务异步执行,它可能会延迟到您调用 get()
在返回的 future 。)
关于c++ - 应该在游戏循环 C++ 中调用 std::async 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850481/