今天折騰了比較久,百度了不少文章,由於是在windows下的導入pthread庫,折騰了蠻久的,主要是卡在對動態庫dll文件和lib、頭文件認識之中。估計像新手一枚的我可能才遇到一些這樣的坑。ios
首先,咱們先下載它的庫。windows
pthreads-w32 下載地址架構
咱們這裏下載最新版本pthreads-w32-2-9-1函數
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zipui
下載後解壓,能夠看到共有三個文件夾spa
咱們用到的主要是「Pre-built.2」這個文件夾下的三個文件夾,分別是動態連接庫、頭文件、靜態連接庫線程
這兒網上找過好幾種方式,1種是將相關的lib、頭文件直接copy到咱們visual studio中去, 2是直接在工程中去設置lib目錄和依賴。不過前提是咱們windows原本沒有pthread的動態庫dll文件,這時候須要咱們將dll文件下的x86和x64對應的dll複製到對應,顧名思義,x86是32位cpu架構,x64是64位架構,而我這兒須要x86對應的是放到c:\windows\syswin64文件中去,x64對應的dll放到system32文件中去,這兒因爲本身新手,沒理解爲何感受沒對應上,system32不是對應32位麼,但願之後能夠理解,本身系統和cpu也是64位的,反正只能這樣,這兒坑了下,搞了很久,這樣放搞定。blog
我是使用2的方式,直接附代碼:ip
#include <iostream>
#include <pthread.h>
using namespace std;
#pragma comment(lib, "pthreadVC2.lib")//這兒是直接引用的工程裏面的pthread相關lib,我這兒用的是x64的,這兒可能要注意,我建立get
//工程默認是32位的,須要本身去手動調下,反過來應該使用x86的lib應該直接也就ok
void * thread(void * a)
{
cout << "a==" << *((int*)a) << endl;
for (int i = 0; i < 30; i++)
{
printf("線程執行第 %d 次\n", i + 1);
}
return NULL;
}
void main()
{
pthread_t id;
int value = 100;
int ret = pthread_create(&id, NULL, thread, &value);//建立線程,id至關於惟一標識線程,我的理解,thread指向了上面函數代碼地址, //線程的執行方法體,傳了一個值用來作實驗下。
if (ret != 0)
{
cout << "線程建立錯誤!" << endl;
exit(-1);
}
for (int i = 0; i < 30; i++)
{
printf("main函數執行第 %d 次\n", i + 1);
}
pthread_join(id, NULL); //
system("pause");//由於沒有使用控制檯,因此用系統函數使得窗口暫停
}
附設置項目工程對應的cpu能夠支持的,我這兒只作了x64的
設置相應的工程平臺我這兒選的x64,用的lib也是對應的x64的lib
把頭文件引入進來
這兒選擇平臺的問題算屬於個坑,須要對號入座。這樣就基本大功告成。
人生的第一個c語言線程建立成功了!方式應該仍是能夠選擇1的方式若是做爲通用庫的話,之後使用也方便。後面有時間繼續摸索