std :: thread调用类的方法

kob*_*bra 56 c++ multithreading c++11

可能重复:
使用成员函数启动线程

我有一个小班:

class Test
{
public:
  void runMultiThread();
private:
  int calculate(int from, int to);
}  
Run Code Online (Sandbox Code Playgroud)

如何在方法的两个线程中calculate使用两个不同的参数集(例如calculate(0,10),calculate(11,20))运行方法runMultiThread()

PS谢谢我忘记了我需要传递this,作为参数.

Ker*_* SB 163

不是那么难:

#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();
}
Run Code Online (Sandbox Code Playgroud)

如果仍然需要计算结果,请改为使用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();
}
Run Code Online (Sandbox Code Playgroud)

  • @ravenspoint:问题是如何在不同的线程中使用不同的参数运行一个函数,这个答案清楚地说明了如何做到这一点.这怎么没用? (12认同)
  • @ravenspoint:那些是*其他*问题; 并且还有*更多其他*问题. (8认同)
  • @ravenspoint:线程安全是否取决于OP,非?我同意应该恢复返回值,尽管OP并不表示那是预期的(它可能像`printf`).`std :: async`将是另一种选择. (4认同)
  • @JonathanWakely也许是因为OP这么问?虽然我们首先不知道他的方法是否正确,但也许他同时进行其他计算. (4认同)
  • 我不认为线程的数量会成为争论的焦点.我只是在演示这些技巧; 我相信OP可以以任何适合她最终并发需求的方式安排代码. (3认同)
  • 为什么产生两个新线程然后阻塞当前线程?通常最好生成一个新线程并在当前线程中进行其他计算。 (2认同)