亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言編程中借助pthreads庫進行多線程編程的示例

2020-01-26 14:49:18
字體:
來源:轉載
供稿:網友

運行之前需要做一些配置:
1.下載PTHREAD的WINDOWS開發包 pthreads-w32-2-4-0-release.exe(任何一個版本均可)
   http://sourceware.org/pthreads-win32/ ,解壓到一個目錄。
2.找到include和lib文件夾,下面分別把它們添加到VC++6.0的頭文件路徑和靜態鏈接庫路徑下面:
   a).Tools->Options,選擇Directory頁面,然后在Show directories for:中選擇Include files(默認)     在Directories中添加include的路徑。在Show directories for:中選擇Library files,
    在Directories中添加lib的路徑。
   b).Project->Settings,選擇Link頁面,然后將lib下的*.lib文件添加到Object/library Modules,
     各lib文件以空格隔開。
   c).將lib下的*.dll文件復制到工程目錄下,即根目錄。 

我們進行多線程編程,可以有多種選擇,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK實現了的線程庫,如果你想讓你的程序有更多的移植性你最好是選擇POSIX中的Pthread函數庫,我的程序是在Linux下寫的,所以我使用了Pthread庫(是不是很傷心,我知道有不少人期待的是WindowsAPI的,好吧,有機會以后再講那個,現在先把這一系列專題寫完 ^_^)

如果你用的是LINUX/UNIX/MacOSX,那么我們已經可以開始了,如果你用的是WINDOWS,那么你需要從網站上下載PTHREAD的WINDOWS開發包,所幸他非常的小。網站地址是http://sourceware.org/pthreads-win32/

示例
先來看一個基本的例子:

#include <pthread.h>#include <iostream>using namespace std;void* tprocess1(void* args){   while(1){     cout << "tprocess1" << endl;   }   return NULL;}void* tprocess2(void* args){   while(1){     cout << "tprocess2" << endl;   }   return NULL;}int main(){   pthread_t t1;   pthread_t t2;   pthread_create(&t1,NULL,tprocess1,NULL);   pthread_create(&t2,NULL,tprocess2,NULL);   pthread_join(t1,NULL);   return 0;}

在上面的例子中,我們首先加入了pthread.h文件包含,這是所以pthread多線程程序所必須的,接著是iostream我們進行輸入輸出時要用到,接著就是兩個函數的定義,這和普通的函數沒有什么區別,之所以寫成的

void* tprocess1(void* args)

這樣的形式,完全是為了迎合pthread_create函數的參數類型,你也可以不這樣定義,只要在調用pthread_create創建線程的時候強制轉換一下指針類型就可以了。

這兩個函數將被用做線程的執行體,也就是說在兩個線程里同時運行這兩個函數。

現在我們來看main函數,和pthread有關的調用都在這里了。
pthread_t是線程結構,用來保存線程相關數據,你也可以理解為是線程類型,聲明一個線程對象(變量)。

   pthread_t t1;   pthread_t t2;

這里我們聲明了兩個線程變量t1,t2

   pthread_create(&t1,NULL,tprocess1,NULL);   pthread_create(&t2,NULL,tprocess2,NULL);

這兩句非常重要,pthread_create用來創建線程并啟動,他的原型是

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);

我們可以知道第一個參數是線程指針,第二參數是線程屬性指針,線程屬性pthread_attr_t用來指定線程優先級等屬性,一般的情況下,我們沒有必要修改,使用默認屬性來構造線程,所以這里一般取NULL,我們也是這樣做的,第三個參數是一個函數指針(函數指針?什么東西,沒聽說過?。俊迺?,好嘛,你復習一下C或是C++指針那部分吧)就是線程要執行的代碼,這里我們分別要執行tprocess1 tprocess2就寫成了上面的樣子,這里這個函數指針的類型定義是返回一個空類型指針,接收一個空類型指針參數的函數指針,如果你的函數不是這個定義,那就可以直接轉化一下就可以了。

寫完這兩行代碼,兩個線程就已經執行起來了,但是如果你省略了

   pthread_join(t1,NULL);

然后嘗試編譯運行程序的時候你會發現程序似乎什么也沒干就退出了,是的,那是因為程序的主線程退出的時候操作系統會關閉應用程序使用的所有資源,包括線程……所以在main函數結束前我們得想辦法讓程序停下來,pthread_join方法的功能就是等待線程結束,要等的線程就是第一個參數,程序會在這個地方停下來,直到線程結束,第二個參數用來接受線程函數的返回值,是void**類型的指針,如果沒有返回值,就直接設為NULL吧。

程序寫好了,我們怎么編譯運行它呢?
如果你使用的是Linux:
在終端里輸入

g++ thread.cpp -othread -lpthread./thread

就可以完成程序的編譯及運行

如果你用的是VC:
在工程屬性里加入開發包里的幾個庫文件
把那幾個DLL文件放到你的工程路徑里,也就是程序運行時候的工作路徑,這個在VC6和2005里似乎不太一樣,如果你不確定,那就直接放到SYSTEM32里吧。。。
下面的工作就非常簡單了
點運行,提示編譯,就確定,好了,結果出來了。。。

是不是感覺多線程如此的簡單,短短幾行代碼就搞定了,我想你已經可以寫出一個簡單的多線程程序了吧,呵呵,其實問題沒有這么簡單,多線程我們還要面對線程同步的問題,我會在下一個專題里給大家講到。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久人成影片一区二区三区| 亚洲人午夜色婷婷| 欧美成人免费一级人片100| 伊人伊人伊人久久| 国产日韩av在线| 色播久久人人爽人人爽人人片视av| 97国产真实伦对白精彩视频8| 久久久噜噜噜久久| 91欧美日韩一区| 中文字幕在线成人| 麻豆一区二区在线观看| 国产91在线播放| 国产精品久久综合av爱欲tv| 亚洲国产成人在线视频| 色婷婷亚洲mv天堂mv在影片| 欧美一级片久久久久久久| 精品女同一区二区三区在线播放| 亚洲aa中文字幕| 91久久久久久久久| 国产在线拍偷自揄拍精品| 最近2019年中文视频免费在线观看| 久久久久久尹人网香蕉| 亚洲午夜精品视频| 青青草99啪国产免费| 国产成人一区三区| 精品久久久在线观看| 精品国产999| 国产精品美女www| 在线视频日本亚洲性| 97精品国产91久久久久久| 日韩在线观看视频免费| 久久乐国产精品| 日韩在线中文视频| 伊人久久免费视频| 欧美午夜激情视频| 国产精品免费小视频| 欧美日韩亚洲一区二区三区| 国内精品小视频在线观看| 国产精品中文字幕在线| 成人免费视频97| 日韩在线观看免费全集电视剧网站| 国产999精品久久久| 国产一区二区丝袜高跟鞋图片| 最新69国产成人精品视频免费| 亚洲风情亚aⅴ在线发布| 久久综合电影一区| 国产精品久久久一区| 中文字幕亚洲图片| 亚洲国产欧美一区二区三区同亚洲| 亚洲视频一区二区三区| 91久久精品久久国产性色也91| 国产成人小视频在线观看| www.美女亚洲精品| 色综合影院在线| 欧美资源在线观看| 欧美日韩免费在线观看| 精品在线欧美视频| 欧美成人免费全部| 欧美大荫蒂xxx| 韩日精品中文字幕| 久久久www成人免费精品张筱雨| 久久6免费高清热精品| 亚洲国内精品在线| www.亚洲一区| 26uuu亚洲伊人春色| 色婷婷av一区二区三区久久| 国产精品免费一区二区三区都可以| 91久久精品在线| 日韩成人高清在线| 欧美激情按摩在线| 日韩69视频在线观看| 欧美黑人性猛交| 成人h片在线播放免费网站| 久久久久久这里只有精品| 日韩h在线观看| 亚洲成人在线视频播放| 欧美在线一区二区视频| 亚洲国产精品美女| 欧美一级免费视频| 国产自摸综合网| 国产啪精品视频网站| 九九热精品视频在线播放| 久久久久久高潮国产精品视| 国产精品丝袜久久久久久不卡| 亚洲第一区中文99精品| 亚洲天堂网站在线观看视频| 成人伊人精品色xxxx视频| 国产欧美精品一区二区三区介绍| 日韩国产在线播放| 亚洲丝袜av一区| 欧美另类极品videosbest最新版本| 国产精品成人国产乱一区| 国产精品国产三级国产专播精品人| 一本大道久久加勒比香蕉| 久久久999精品免费| 性欧美亚洲xxxx乳在线观看| 伊人久久久久久久久久| 久久视频在线看| 国产精品欧美一区二区三区奶水| 伊人成人开心激情综合网| 国产精品十八以下禁看| 精品中文字幕在线| 国产精品1区2区在线观看| www国产精品视频| 欧美成人黄色小视频| 亚洲www视频| 国产欧美日韩中文字幕在线| 国产亚洲欧美日韩美女| 国产91在线高潮白浆在线观看| 国产精品www| 91在线网站视频| 成人精品一区二区三区电影黑人| 亚洲人成网站999久久久综合| 亚洲精品乱码久久久久久金桔影视| 欧美另类精品xxxx孕妇| 国产精品福利在线观看网址| 亚洲第一黄色网| 亚洲天堂免费视频| 中文字幕日韩av| 亚洲国产成人精品电影| 欧美日韩国产一区二区| 国产精自产拍久久久久久蜜| 欧美色视频日本高清在线观看| 成人精品久久一区二区三区| 久久久亚洲网站| 国产999精品久久久影片官网| 韩日精品中文字幕| 亚洲精品一区二区在线| 亲爱的老师9免费观看全集电视剧| 日韩av大片在线| 国产亚洲精品激情久久| 欧美日韩第一页| 亚洲成人动漫在线播放| xxxx性欧美| 欧美电影第一页| 日韩成人黄色av| 亚洲欧美国产精品专区久久| 91免费人成网站在线观看18| www.美女亚洲精品| 国产一区二区三区在线视频| 中文字幕在线观看亚洲| 欧美日韩亚洲一区二| 丰满岳妇乱一区二区三区| 欧美在线一区二区三区四| 精品国产一区二区三区在线观看| 一本色道久久综合狠狠躁篇怎么玩| 成人亚洲欧美一区二区三区| 91精品国产综合久久久久久蜜臀| 国产亚洲美女久久| 国产精品日韩专区| 在线精品国产成人综合| 久久亚洲私人国产精品va| 人体精品一二三区| 日韩av影片在线观看| 国产精品美腿一区在线看| www.亚洲免费视频| 亚洲曰本av电影| 欧美国产日韩在线| 8x海外华人永久免费日韩内陆视频| 91精品国产免费久久久久久| 成人网在线视频| 久久精品亚洲一区| 国产精品一区二区性色av| 久久色精品视频|