提升:触发并忘记异步函数调用
Boost: Fire and forget asynchronous function call?
我想一次性调用函数调用。在 Boost/C++ 中执行此操作的最佳方法是什么?
我想传递给它两个参数,不需要结果。
好吧,
你可以启动一个线程,然后再也不加入它。像这样:
boost::thread some_thread(&SomeFunction, param1, param2);
一旦 some_thread 变量超出范围,执行线程将被分离,并且无法再次连接。除非此函数的处理时间很长,否则启动线程是一种浪费。
我已经有
一段时间没有使用 boost::thread了,但我在该类的文档页面上看到了一个简单的示例:
void find_the_question(int the_answer);
boost::thread deep_thought_2(find_the_question,42);
我相信一旦它完成该功能,线程就会退出。 这可能不是您想要的,因为一旦线程超出范围,它就会被销毁。 如果这不起作用,您可能需要创建一个长时间运行的线程池,然后将函子作为 boost::bind 组合物传递。
根据执行此操作的频率,最好创建一个线程池以及一个工作队列。 如果您尝试每秒创建线程数十次,则可能会产生大量开销。 如果你不关心返回值,那就很容易了。
启动一两个(或十个)线程;有一个线程安全的函子队列来调用(将参数绑定到函数并将其放在队列中);线程在队列上等待某些东西出现,第一个唤醒的线程来处理工作。 当线程完成作业运行时,它将再次等待队列。
看看这个项目,了解一种方法。
当然,如果您每隔几秒钟才进行一次异步调用以提高 UI 的响应能力,那么每次都启动一个新线程会更容易。
也许你想发出一个信号?
我真的很喜欢Qt的信号和插槽功能,我知道Boost也有信号/插槽。 不过,我从未在 Boost 中使用过信号/插槽。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在C++中实现带有packaged_task的异步等待循环?
- 创建 Spdlog 异步文件记录器时遇到困难
- C ++异步键盘输入(标准方式)
- 在 gtkmm 中异步加载图像
- 带有 Boost.Beast 的异步读取标头
- 如何在 c++ 中异步调用静态方法?
- libcurl :C++处理多个异步请求
- 如何在C++上启动异步线程
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 增强 ASIO 和串行端口异步读取
- 使用 Qt5 SQL 进行异步数据库访问的策略
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- C++中真正的异步文件 IO
- 提升::Asio 异步聊天客户端停止与服务器通信
- 在 c++ 托管和异步运行中调用 c# 可执行文件
- std::异步与非静态成员函数
- 我有一个关于C++提升的问题:: asio 和 std :: 异步
- 触发异步任务并忘记它的C++ 11 种方法是什么?
- 提升:触发并忘记异步函数调用