C 的程序建立和使用

2021-06-22 03:23:11 字數 1881 閱讀 7722

最近在做乙個訊息中介軟體裡面涉及到多執行緒程式設計,由於跨平台的原因我採用了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結合起來使用

程序的建立和程序狀態

程序 程序是乙個程式在記憶體中執行的過程。程序由程式 資料和程序控制塊 簡稱pcb 組成 程序控制塊 pcb linux中的pcb是乙個名叫task struct 的結構體,其中有一下幾個內容 識別符號 用來區別於其他的程序的識別符號。狀態 任務狀態,退出 退出訊號等。優先順序 程序的優先順序。程式...

程序建立和執行

簡單的說,每個應用在執行時就會產生乙個程序,這個程序就對這個應用負責,掌握這個應用的執行狀態。可是為什麼還要用乙個程序來控制乙個應用呢,下面將會簡單的解釋一下。現在的應用對於資源的要求都是獅子大開口,開口就是幾個g,一台電腦的記憶體一般也就幾個g,總不能一台電腦就跑這乙個應用吧。為了解決這個問題,作...

Linux程序的建立和終結

linux建立程序很複雜,首先呼叫fork 最終呼叫do fork 而do fork 呼叫copy process 首先是copy process 的一系列工作 1.複製父程序。呼叫dup task struct 此時子程序與父程序描述符完全相同。2.把程序描述符中的各項設為0或者初始值,並把程序狀...