今天折腾了比较久,百度了不少文章,由于是在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的方式若是做为通用库的话,之后使用也方便。后面有时间继续摸索