關於linux的pthread庫的使用,個人第一個c/c++線程

今天折騰了比較久,百度了不少文章,由於是在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的方式若是做爲通用庫的話,之後使用也方便。後面有時間繼續摸索

相關文章
相關標籤/搜索