今天折腾了比较久,百度了很多文章,因为是在windows下的导入pthread库,折腾了蛮久的,主要是卡在对动态库dll文件和lib、头文件认识之中。估计像新手一枚的我可能才遇到一些这样的坑。
首先,我们先下载它的库。
pthreads-w32 下载地址
我们这里下载最新版本pthreads-w32-2-9-1
下载后解压,可以看到共有三个文件夹
我们用到的主要是“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位的,反正只能这样,这儿坑了下,搞了好久,这样放搞定。
我是使用2的方式,直接附代码:
#include <iostream>
#include <pthread.h> using namespace std; #pragma comment(lib, "pthreadVC2.lib")//这儿是直接引用的工程里面的pthread相关lib,我这儿用的是x64的,这儿可能要注意,我创建//工程默认是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的方式如果作为通用库的话,以后使用也方便。后面有时间继续摸索