【问题标题】:std::thread calling method of class [duplicate]类的std :: thread调用方法[重复]
【发布时间】: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 作为参数。

【问题讨论】:

    标签: c++ multithreading c++11


    【解决方案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 可以以任何适合她最终并发需求的方式安排代码。
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多