给定对象x,我想启动一个新线程来调用x.a()
甚至x.a(1,2,3)
。我可以使用boost::thread
为非成员函数执行此操作;但我如何为会员功能做到这一点?我如何通过this
指针?一般来说,有很多STL和Boost代码和模板将代码作为参数,但是,由于这不是真正在C++中定义的(函数不是一级vals,本地lambda支持)我很困惑他们是如何定义的。我可以做试验和错误,但我想要更清洁的人,更可靠。C++ Boost.Thread:传递对象的方法
更新:我的问题主要涉及传递一个方法;当我尝试做什么将是明显的语法(ClassName::method_name, instance)
我得到invalid use of non-static member function
error: no matching function to call
。如果你能够在非静态方法中显示使用Boost.thread的正确语法,这将有所帮助。
UPDATE 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支持。 – Puppy
如果你是一个原始的野蛮人,你也可以使用boost :: bind。 – Puppy
这已经在StackOverflow –