类的std :: thread调用方法[重复]
Posted
技术标签:
【中文标题】类的std :: thread调用方法[重复]【英文标题】:std::thread calling method of class [duplicate] 【发布时间】:2012-06-15 11:03:06 【问题描述】:可能重复:Start thread with member function
我有一个小班:
class Test
public:
void runMultiThread();
private:
int calculate(int from, int to);
如何在方法runMultiThread()
的两个线程中使用两组不同的参数(例如calculate(0,10)
、calculate(11,20)
)运行方法calculate
?
PS 谢谢我忘了我需要传递this
作为参数。
【问题讨论】:
【参考方案1】:没那么难:
#include <thread>
void Test::runMultiThread()
std::thread t1(&Test::calculate, this, 0, 10);
std::thread t2(&Test::calculate, this, 11, 20);
t1.join();
t2.join();
如果仍然需要计算结果,请使用 future 代替:
#include <future>
void Test::runMultiThread()
auto f1 = std::async(&Test::calculate, this, 0, 10);
auto f2 = std::async(&Test::calculate, this, 11, 20);
auto res1 = f1.get();
auto res2 = f2.get();
【讨论】:
@ravenspoint:是否线程安全取决于 OP,不是吗?我同意应该恢复返回值,尽管 OP 并未表明这是有意的(它可能类似于printf
)。 std::async
将是一个替代方案。
@JonathanWakely 也许是因为 OP 这么问?虽然我们一开始不知道他的方法是否正确,但也许他同时进行了其他计算。
@ravenspoint:这个问题询问了如何在具有不同参数的不同线程中运行一个函数,这个答案清楚地展示了如何做到这一点。这怎么没用?
@ravenspoint:这些是其他问题;还有其他个问题。
我不认为线程数会成为争论的焦点。我只是在演示技术;我相信 OP 可以以任何适合她最终并发需求的方式安排代码。以上是关于类的std :: thread调用方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章