boost thread執行緒建立方式總結

2021-06-04 07:29:25 字數 3242 閱讀 2585

最近在做乙個訊息中介軟體裡面涉及到多執行緒程式設計,由於跨平台的原因我採用了boost執行緒庫。在建立執行緒時遇到了幾種執行緒建立方式現總結如下: 

首先看看boost::thread的建構函式吧,boost::thread有兩個建構函式:

(1)thread():構造乙個表示當前執行執行緒的執行緒物件;

(2)explicit thread(const boost::function0& threadfunc):

boost::function0可以簡單看為:乙個無返回(返回void),無引數的函式。這裡的函式也可以是類過載operator()構成的函式;該建構函式傳入的是函式物件而並非是函式指標,這樣乙個具有一般函式特性的類也能作為引數傳入,在下面有例子。

第一種方式:最簡單方法

#include

#include

void hello()

int main(int argc,char*argv)

第二種方式:複雜型別物件作為引數來建立執行緒:

#include

#include

#include

boost::mutex io_mutex;

struct count

void operator()()

}

int id;

};

int main(int argc,char*argv)

第三種方式:在類內部建立執行緒;

(1)類內部靜態方法啟動執行緒

#include

#include

class helloworld

static void start()

};

int main(int argc,char*argv)

在這裡start()和hello()方法都必須是static方法。

(2)如果要求start()和hello()方法不能是靜態方法則採用下面的方法建立執行緒:

#include

#include

#include

class helloworld

void start()

};

int main(int argc,char*argv)

(3)在singleton模式內部建立執行緒:

#include

#include

#include

class helloworld

static void start()

static helloworld&getinstance()

private:

helloworld(){}

static helloworld*instance;

};

helloworld*helloworld::instance=0;

int main(int argc,char*argv)

第四種方法:用類內部函式在類外部建立執行緒;

#include

#include

#include

#include

class helloworld

};

int main(int argc,char*argv)

如果執行緒需要繫結的函式有引數則需要使用boost::bind。比如想使用 boost::thread建立乙個執行緒來執行函式:void f(int i),如果這樣寫:boost::thread thrd(f)是不對的,因為thread建構函式宣告接受的是乙個沒有引數且返回型別為void的型別,而且不提供引數i的值f也無法執行,這時就可以寫:boost::thread thrd(boost::bind(f,1))。涉及到有參函式的繫結問題基本上都是boost::thread、boost::function、boost::bind結合起來使用。

boost thread執行緒建立方式總結

最近在做乙個訊息中介軟體裡面涉及到多執行緒程式設計,由於跨平台的原因我採用了boost執行緒庫。在建立執行緒時遇到了幾種執行緒建立方式現總結如下 首先看看boost thread的建構函式吧,boost thread有兩個建構函式 1 thread 構造乙個表示當前執行執行緒的執行緒物件 2 exp...

boost thread程式設計 執行緒組

thread庫提供thread group類用於管理一組執行緒,就像乙個執行緒池,它內部使用std list class thread group private noncopyable 成員函式create thread是乙個工廠函式,可以建立thread物件並執行執行緒,同時加入到內部的list...

boost thread的建立方式

最近在做乙個訊息中介軟體裡面涉及到多執行緒程式設計,由於跨平台的原因我採用了boost執行緒庫。在建立執行緒時遇到了幾種執行緒建立方式現總結如下 首先看看boost thread的建構函式吧,boost thread有兩個建構函式 1 thread 構造乙個表示當前執行執行緒的執行緒物件 2 exp...