簡體   English   中英

在VC ++中將MultiThread與boost一起使用

[英]use of MultiThread with boost in VC++

我是Boost,C ++和線程技術的新手,我正在嘗試通過Boost庫使用線程,但是我無法通過對象訪問函數。

這是我在做什么:

#include <iostream>
#include <boost/thread.hpp>
using namespace std;
class myclass
{
    int a,b;
    public:
    void print_a();
    void print_b();
};

void myclass::print_a()
{
 for(int i=1;i<1000000;++i) cout<<"printing a"<<endl;
}
void myclass::print_b()
{
    for(int i=1;i<1000000;++i) cout<<"printing b"<<endl;
}

void print_x()
{
    for(int i=1;i<1000000;++i) cout<<"printing x"<<endl;
}

void print_y()
{
    for(int i=1;i<1000000;++i) cout<<"printing y"<<endl;
}

int main()
{
    myclass obj;
    boost::thread thread_a(obj.print_a);
    boost::thread thread_b(obj.print_b);
    boost::thread thread_x(print_x);
    boost::thread thread_y(print_y);
    thread_a.join();
    thread_b.join();
    thread_x.join();
    thread_y.join();
    return 0;
}

調用boost::thread thread_a(obj.print_a)時出現錯誤boost::thread thread_a(obj.print_a)是一個pointer to a bound function may only be called to use this functionpointer to a bound function may only be called to use this function並且與thread_b相同,但是對於thread_x和thread_y來說,它可以正常工作。 我想念的是什么,請引導我

謝謝你的問候

除非有我不知道的新語法,否則您無法將obj.print_a傳遞為必須執行的“可運行”操作

boost::bind( &myclass::print_a, &obj ); 

std::bind如果您的版本支持)。

碰巧boost::thread具有多參數版本,可以為您執行綁定。 因此,當您創建線程時

boost::thread thread_a( &myclass::print_a, &obj );

在C ++ 11中,您也可以使用lambda

[&obj]{ obj.print_a(); } 

因此在一排

boost::thread thread_a( [&obj]{ obj.print_a(); } );

或者,如果看起來太凌亂,則分配lambda(您當然可以使用auto作為其類型),然后將其傳遞到單獨的行中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM