c++ - 应该在游戏循环 C++ 中调用 std::async 吗?

标签 c++ multithreading c++11

调用 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/

相关文章:

c# - 从 C++ 和 C# 调用 C++ DLL

c++ - boost 表现力 : wrong match?

c++ - 如何正确使用 FindResourceW()?

c++ - 使用 sleep() 时生产者消费者(使用 Monitor)代码不工作?

c# - 使用相同代码实现时无法模仿 ConcurrentStack 的性能

c++ - 更好的做法 : Ever looping thread or successive threads?

c++ - 未连接的 UDP 套接字上的 WSARecvFrom 不返回

MySQL InnoDB "SELECT FOR UPDATE"- 跳过锁定等效

c++ - 从转换运算符提取返回和参数类型到函数指针

c++ - 可变参数模板类中的定义数量不同