一个简单的利用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实现多线程调用类对象函数的例子

Leave a Reply

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