c++ - 如何使用 C++ 在不同的线程上调用函数?

标签 c++ multithreading boost-thread

我正在创建一个将由其他团队/产品使用的组件。该组件允许客户端代码发出一组命令,并且在内部这些命令在工作线程上执行 - 使用线程安全队列实现,其中命令被添加到调用者(客户端)线程上的队列,并在工作线程。

我想以“操作 XYZ 已完成”的形式从我的组件向客户端代码提供反馈。我可以通过回调轻松地做到这一点,但是回调是在我的工作线程上调用的——我希望它发生在调用者(客户端)线程上。 我该怎么做?

它是一个跨平台组件(Windows、Linux、OS X)。升压是可用的。我的默认开发编译器是 MS VC++ 2010,即它不是 C++11。

最佳答案

安排这种多线程架构的通常方法是让每个线程都有一个阻塞的仿函数队列。

每个线程循环其队列,依次执行每个仿函数。

要在不同的线程中调用一个函数,您只需创建一个仿函数并将其添加到该线程队列。

要在 C++ 中创建仿函数,您可以使用 std::functionstd::bind、lamdbas、函数对象或函数指针。参见 std::function

没有标准的阻塞队列,但是用信号量和互斥量(它们是 std::thread 库 afaik 的一部分,也是 pthread 的一部分)编写一个相当容易。 Google “阻塞队列”

关于c++ - 如何使用 C++ 在不同的线程上调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208534/

相关文章:

c++ - Linux VMware 11 guest 台面驱动程序安装以更新 OpenGL

c++ - C++中指向对象的指针

非模板类中任意类型的C++成员变量

c - 如何将消息(在 C 中)从一个线程发送到另一个线程?

线程函数内的c++函数

c++ - 建议一个合适的算法来合并两个包含类对象的数组(不重复)

.net - 的确,对于长时间运行的进程,最好手动执行线程而不是线程池?

android - 如何在 Android 上使用 RxJava 在多线程上运行订阅者

c++ - 为什么 "boost.thread"手动调用 "intrusive_ptr_add_ref"?

c++ - 将 std::future 传递给 boost::thread 与 std::thread