一个简单的利用boost实现多线程调用类对象函数的例子

今天写了一个用Boost实现多线程调用类成员函数的简单例子,放在这里以供参考。

这个例子中并不需要对类做任何修改,只是调用boost::bind把要执行的函数,对象以及参数绑定在一起。我用了三个例子由简单到复杂展示了如何绑定,应该很容易理解。

本程序经测试在Ubuntu 12.10 (g++ 4.7.2) 下编译通过。

boost库请自行安装。

// g++ thread.cpp -lboost_system -lboost_thread
#include <iostream>
#include <string>
#include <boost/thread.hpp>
#include <boost/bind.hpp>

using namespace std;

class myclass {
  public:
    string str_;
    int num_;

    myclass(string s, int n) {str_ = s; num_ = n;};

    void run1() {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<str_<<" print : "<<i<<endl;
      }
    };

    void run2() {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<toString()<<" print : "<<i<<endl;
      }
    };

    void run3(string str) {
      for(int i=0; i<num_; i++) {
        cout<<"Thread "<<toString()<<" print : "<<i<<" "<<str<<endl;
      }
    };

    string toString() {
      string str = "["+str_;
      str += "]";
      return str;
    };
};

int main (int argc, char ** argv) {
  myclass c1("A", 5);
  myclass c2("B", 5);
  myclass c3("C", 5);

  boost::thread t1(boost::bind(
        &myclass::run1,                // pointer to member function to execute in thread
        &c1 ));                        // pointer to instance of class

  boost::thread t2 (boost::bind(
        &myclass::run2,                // pointer to member function to execute in thread
        &c2 ));                        // pointer to instance of class

  boost::thread t3 (boost::bind(
        &myclass::run3,                // pointer to member function to execute in thread
        &c3,                           // pointer to instance of class
        "Hey!" ));                     // parameter to run3(string str)

  cout<<"In the middle of main()"<<endl;

  t1.join();
  t2.join();
  t3.join();

  cout<<"In the end of main()"<<endl;
  return 0;
}

原创文章,转载请注明: 转载自 iDEAnels

本文地址: 一个简单的利用boost实现多线程调用类对象函数的例子

2 thoughts on “一个简单的利用boost实现多线程调用类对象函数的例子”

  1. hello therde and thank you for your info ? I have definitely picked up anythiing
    new from right here. I did however expertise several technical issues using this web site,
    since I eperienced to reload the ebsite lots of times previous to I could get it
    tto load properly. I had been wondering if your web hosting is OK?
    Not that I’m complaining, but slow loading inbstances times will often affect your placement in google and
    cohld damage your high-quality score if ads and markeing with Adwords.
    Anuway I am addihg this RSS to my email and could look out for a lot
    more of your respective interesting content. Make sre you update
    this again very soon.

  2. I see you don’t monetize your site, don’t waste your traffic, you can earn extra bucks every month because you’ve got high quality content.

    If you want to know how to make extra money, search for: Mrdalekjd methods for $$$

Leave a Reply

Your email address will not be published. Required fields are marked *