【发布时间】:2015-06-17 20:32:43
【问题描述】:
给定对象 x,我想启动一个新线程来调用 x.a() 甚至是 x.a(1,2,3)。我可以使用boost::thread 为非成员函数执行此操作;但是如何为成员函数执行此操作?如何传递this 指针?
一般来说,有很多 STL 和 Boost 代码和模板将代码作为参数,但是,因为这在 C++ 中并没有真正定义(函数不是一流的 val,没有原生 lambda 支持),所以我是非常困惑它们是如何定义的。我可以反复试验,但我想要更清晰、更可靠的东西。
更新:我的问题主要涉及传递一个方法;当我尝试做明显的语法(ClassName::method_name, instance)时,我得到invalid use of non-static member functionerror: no matching function to call。如果您能展示在非静态方法上使用 Boost.thread 的正确语法,将会有所帮助。
更新 2:我找到了为什么要为此苦苦挣扎。给出的答案(例如@OrDinari)非常适合boost::thread。但是,当我尝试使用thread_group,即thread_group::create_thread 时,我得到了这个错误:
error: no matching function for call to ‘boost::thread_group::create_thread(void (C::*)(), C*)’
所以:
- 为什么它适用于单线程而不适用于线程组?
- 如何使用在组中创建线程来运行成员函数?
【问题讨论】:
-
C++ 确实支持原生 lambda。
-
如果您是原始野蛮人,也可以使用 boost::bind。
-
这已经在 StackOverflow 上被回答了一百万次
-
@πάνταῥεῖ,你为什么要使用
bind?简单的thread t(&X::a, &x, 1, 2, 3)有什么问题?
标签: c++ multithreading boost boost-thread