boost线程使用带参数的类成员函数方法
假设类VZController有成员函数如下:
[cpp]
void downloadData(std::string filename);
需要将下载数据的部分放到一个单独的线程去执行下载过程,但文件的保存需要通过主线程指定,如何实现?
可以借助boost::function和boost::bind来生成一个包装函数对象,然后对函数对象进行参数绑定实现,具体代码如下:
[cpp]
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/thread/thread.hpp>
...
std::string localFileName = "D:\\temp\\dl.dat";
boost::function<void (std::string)> memberFunctionWrapper(boost::bind(&VZController::downloadData, this, _1));
boost::thread downloadThread = new boost::thread(boost::bind(memberFunctionWrapper, localFileName));
...
如果要传递多个参数的话,也很方便,把函数对象的定义改一下就可以。
“Boost线程库学习笔记”(http://www.cnblogs.com/younes/archive/2010/06/06/1752745.html)里面也介绍了一个给线程函数传递参数的方法,不过比这个方法麻烦一些,我也没有试验过是不是可以用在类对象的成员函数上。
补充:软件开发 , C++ ,