关于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的方式若是做为通用库的话,之后使用也方便。后面有时间继续摸索

相关文章
相关标签/搜索