首页 > 编程语言 > 详细

2.2 传递参数给线程函数

时间:2021-05-24 15:28:17      阅读:14      评论:0      收藏:0      [点我收藏+]

传递参数给线程函数

void f(int i, string s)
{
    for (size_t per = 0; per < i; per++)
    {
      cout << per << "-" << s[per] << endl;
    }
}

int main()
{
    std::string s = "hello";
    int s_length = s.length();
    std::thread t(f, s_length, s); // f为与线程t绑定的函数, s_length为f函数的第一个参数,s为f函数的第二个参数
t.join();
  cout
<< s.c_str() << endl; // 打印字符串s
  system("pause");
  return 0;
}

输出结果:

技术分享图片

 通过引用传递参数

  修改f函数的第二个参数为引用,并在函数内修改s的值,输出结果不变。

void f(int i, string& s)
{
    for (size_t per = 0; per < i; per++)
    {
        cout << per << "-" << s[per] << endl;
    }
    s = "finish"; // 修改字符串s的值
}

输出结果(字符串s未修改):

技术分享图片

 

正确传入引用的方式:

void f(int i, string& s)  // 这里也必须是引用类型
{
    for (size_t per = 0; per < i; per++)
    {
    cout << per << "-" << s[per] << endl;
    }
}

int main()
{
    std::string s = "hello";
    int s_length = s.length();
    std::thread t(f, s_length, std::ref(s)); // std::ref来包装需要被引用的参数
    t.join();
    cout << s.c_str() << endl; // 打印字符串s
    system("pause");
    return 0;
}

输出结果(字符串s已修改):

技术分享图片

 线程绑定类的成员函数

class X
{
public:
    void do_lengthy_work(int i, string s);    
};

int main()
{
    std::string s = "hello";
    int s_length = s.length();
    X my_x;
    /* &X::do_lengthy_work:成员函数的函数指针;
     * &my_x:对象指针;
     * s_length与s为传递给函数do_lengthy_work的两个参数
   */
    std::thread t(&X::do_lengthy_work, &my_x, s_length, s);
    t.join();
    return 0; 
}

 

2.2 传递参数给线程函数

原文:https://www.cnblogs.com/tgcf/p/14780321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!