国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:12:54
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C語言編程中借助pthreads庫進行多線程編程的示例,文中的示例環境為Windows系統,需要的朋友可以參考下

運行之前需要做一些配置:

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/

示例

先來看一個基本的例子:

 

 
  1. #include <pthread.h> 
  2. #include <iostream> 
  3.  
  4. using namespace std; 
  5.  
  6. void* tprocess1(void* args){ 
  7. while(1){ 
  8. cout << "tprocess1" << endl; 
  9. return NULL; 
  10.  
  11. void* tprocess2(void* args){ 
  12. while(1){ 
  13. cout << "tprocess2" << endl; 
  14. return NULL; 
  15.  
  16. int main(){ 
  17. pthread_t t1; 
  18. pthread_t t2; 
  19. pthread_create(&t1,NULL,tprocess1,NULL); 
  20. pthread_create(&t2,NULL,tprocess2,NULL); 
  21. pthread_join(t1,NULL); 
  22. return 0; 

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

 

 
  1. void* tprocess1(void* args) 

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

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

現在我們來看main函數,和pthread有關的調用都在這里了。

pthread_t是線程結構,用來保存線程相關數據,你也可以理解為是線程類型,聲明一個線程對象(變量)。

 

 
  1. pthread_t t1; 
  2. pthread_t t2; 

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

 

 
  1. pthread_create(&t1,NULL,tprocess1,NULL); 
  2. pthread_create(&t2,NULL,tprocess2,NULL); 

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

 

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

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

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

 

 
  1. pthread_join(t1,NULL); 

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

程序寫好了,我們怎么編譯運行它呢?

如果你使用的是Linux:

在終端里輸入

 

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

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

如果你用的是VC:

在工程屬性里加入開發包里的幾個庫文件

把那幾個DLL文件放到你的工程路徑里,也就是程序運行時候的工作路徑,這個在VC6和2005里似乎不太一樣,如果你不確定,那就直接放到SYSTEM32里吧。。。

下面的工作就非常簡單了

點運行,提示編譯,就確定,好了,結果出來了。。。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产精品久久一区二区三区不卡| 国产一区二区三区美女秒播| 国产三区四区在线观看| 久热精品视频在线播放| 亚洲电影视频在线| 一本免费视频| av资源网站在线观看| 日本一卡二卡四卡精品| av中文网站| 九九视频在线播放| 国产欧美在线观看视频| 国产超碰精品在线观看| 天堂资源在线中文| 国产成人精品实拍在线| 精品176二区| www.色五月| 国产性色视频| 国产超碰在线| 国产你懂的在线观看| 国产日本韩国在线播放| 亚洲成人福利| h视频在线网站| 欧美日韩性视频一区二区三区| 日本成人网址| 在线91av| 亚洲精品aaaa| 国产精品被窝福利一区| gogo高清在线播放免费| 国产va在线观看| 天天操夜夜操天天射| 色综合久久五月天| 136福利第一导航国产在线| 超碰97在线免费观看| 精品美女在线观看视频在线观看 | 中文字幕中文字幕在线中高清免费版| 精品一区二区三区免费站| 国产三区视频在线观看| 国产香蕉尹人视频在线| 国产麻豆视频| 欧美日韩一区二区三区在线播放| 国产欧美久久久久久久久| 国产主播色在线| 粉嫩av一区| 亚洲成人国产综合| 青青草视频免费在线观看| 亚洲sss视频| 免费网站看黄yyy222| www.夜夜操.com| 女子免费在线观看视频www| 免费网站看黄yyy222| 久久久久国产精品嫩草影院| av在线播放av| 欧美激情福利视频在线观看免费| 九九热视频在线观看| 国产精品天堂| 国产在线播放av| 国产午夜精品一区理论片| 国产精品久久久久白浆| 在线黄色国产电影| 久草电影在线| 国产日本在线| 亚洲人在线播放| 久久精品国产麻豆| 国产精品冒白浆免费视频 | 国产精品视频一区二区免费不卡 | 精品欧美色视频网站在线观看| 国产99re66在线视频| wwww在线观看免费视频| 国产精品综合久久久久| 国产福利免费观看| av丝袜在线| 天天操夜夜摸| 性网站在线观看| 天天av综合网| 青青国产在线| 2019中文字幕在线视频| av资源网站在线观看| 国产天堂在线观看| av网址在线看| www.色婷婷| 2020中文字幕在线播放| 国产在线观看色| 怡红院av在线| 国产区在线观看| 国产中文字幕在线视频| 日本三级在线视频| 在线播放国产区| 国产黄大片在线观看画质优化| www在线观看播放免费视频日本| 中文字幕日本在线| 免费精品国产自产拍观看| 91视频久色| 国产色a在线观看| 超碰在线网站| av人人综合网| 在线观看av中文| 中文在线视频| 91青青在线视频| 国产黄a三级三级三级av在线看| 免费午夜一级| 人人干人人插| 午夜在线不卡| 亚洲精品视频区| av在线播放国产| eeuss影院www在线播放| 四虎精品视频| 欧美艹逼视频| 国产在线观看18| 二区三区中文字幕| 老司机精品视频一区二区| av在线不卡播放| xxxx视频在线| 开心激情五月婷婷| 国产麻豆视频网站| 中文字幕成人乱码在线电影| 国产精品一品| 国产福利热线视频| 伊人免费在线| 精品黄色免费中文电影在线播放| 国产91足控脚交在线观看| 国产对白国语对白| 伊人网在线观看| 九九在线视频| 五月婷婷在线视频| 中文字幕乱在线伦视频乱在线伦视频| 中文字幕亚洲精品视频| 亚洲欧美精品日韩欧美| 欧美色欧美亚洲另类二区精品| 狠狠狠狠狠狠操| 国产对白在线| 久热中文字幕在线观看| 国产婷婷视频在线| 久久国产热视频| 精品视频一二区| 高清视频一区二区三区四区| a级片国产精品自在拍在线播放| 最近中文字幕在线中文视频| 91最新在线| 国产精品理人伦一区二区三区| 国产精品麻豆一区二区三区| 欧美一级久久久久久久久大| 国产福利免费在线观看| 黄网在线免费| 亚色视频在线观看| 午夜视频99| 国产中文字幕在线观看| 日韩欧美中文字幕不卡| 在线成人综合色一区| 国产污视频在线| 麻豆国产在线播放| 一本大道五月香蕉| 国产成在线观看免费视频| 国产麻豆一区二区三区精品| wwwww在线观看免费视频| 国产黄在线播放| 黄色免费av| 国产主播福利在线| 青青免费在线视频| www.色五月| 欧美高清视频| 欧美成人亚洲高清在线观看| 天天艹天天操| 欧美日韩亚洲第一页| www操操操| 国产中文字幕在线看| 丁香花视频在线观看| 丁香婷婷激情| 国产精品扒开做爽爽爽的视频| 国产精品入口麻豆免费| 国产视频福利在线| 18被视频免费观看视频| 中文视频在线| 免费午夜一级| 二人午夜免费观看在线视频| 最好看更新中文字幕| 精品美女在线观看视频在线观看| 精品国产免费第一区二区| 在线观看av网站永久| 青青草观看免费视频在线| 另类视频在线| 国产精品伦一区二区三区级视频频 | 久久久久久91精品色婷婷| 在线视频三级| 精品中文字幕不卡在线视频| 国产免费视频在线| 国产娇喘精品一区二区三区图片| 在线色视频网| 日本中文字幕在线2020| 91社区在线观看| 在线天堂视频| 免费看的av| 国产资源在线看| 国产亚洲精品久久久网站好莱| 国产一卡二卡3卡4卡四卡在线| 久青青在线观看视频国产| 国产美女极品在线| 尤物视频在线观看视频| av中文在线| 91av福利| www.99av|