假設類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)裡面也介紹了一個給線程函數傳遞參數的方法,不過比這個方法麻煩一些,我也沒有試驗過是不是可以用在類對象的成員函數上。