POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。

下载源码

源码主页:https://sourceware.org/pthreads-win32/
ftp地址:ftp://sourceware.org/pub/pthreads-win32

上面的ftp地址不知何故无法连接,另外找了个资源:
https://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/

下载最新版本pthreads-w32-2-9-1-release.zip解压得到三个文件夹

pthreads.2

pthreads.2 里面包含了pthreads 的源代码;

Pre-built.2

Pre-build.2 里面包含了pthreads for win32 的头文件和已编译好的库文件;

QueueUserAPCEx

QueueUserAPCEx 里面是一个alert的driver,编译需要DDK 。Windows Device Driver Kit (NTDDK.h) 需要额外单独安装。

若无特殊需求,直接引用Pre-built.2里面的文件即可。

使用方法

Pre-built.2下有三个文件夹
dll 动态链接库
include 头文件
lib 静态链接库

这里提供两种使用方式,一种是把头文件和静态库放到IDE的安装目录,动态库放到系统目录,这样VS的工程无需其他配置就可以直接使用pthread相关API,虽然取巧但省事;另一种的是对VS工程单独引用,开发日常操作了。

VS2017与VS2019同理,已测试通过。

选择一、全局引用

配置头文件

把include文件夹下的头文件拷贝到vs2017安装目录下

D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\include\

配置静态链接库

把lib文件夹下的静态库文件拷贝到vs2017安装目录下

D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\lib

配置动态链接库

Pre-built.2\dll\x86下的文件拷贝到C:\Windows\SysWOW64目录下
Pre-built.2\dll\x64下的文件拷贝到C:\Windows\System32目录下


选择二、项目引用

我在解决方案目录新建了个ThirdPartyLib目录,与项目目录同级,并把Pre-built.2下的三个文件夹拷过来。

右键项目 - 属性 - 配置属性 - C/C++ - 添加附加包含目录

…\ThirdPartyLib\include;
附加包含目录

右键项目 - 属性 - 配置属性 - 链接器 - 添加32位平台的附加库目录

…\ThirdPartyLib\lib\x86;在这里插入图片描述

右键项目 - 属性 - 配置属性 - 链接器 - 添加64位平台的附加库目录

…\ThirdPartyLib\lib\x64;
在这里插入图片描述

右键项目 - 属性 - 配置属性 - 调试 - 环境 - 配置32位平台环境

path=%path%;…/ThirdPartyLib/dll/x86;
在这里插入图片描述

右键项目 - 属性 - 配置属性 - 调试 - 环境 - 配置64位平台环境

path=%path%;…/ThirdPartyLib/dll/x64;
在这里插入图片描述

测试

#include <pthread.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib,"pthreadVC2.lib")

void* thread(void* val)
{
	int value = *((int*)val);
	printf("value: %d \n", value);
	while(value-- > 0)
	{
		printf(" %d \n", value);
	}
	return NULL;
}

int main()
{
	pthread_t tid;
	int value = 100;
	pthread_create(&tid, 0, thread, &value);

	system("pause");
	return 0;
}
编译错误C2011 “timespec”:“struct”类型重定义
可修改pthread.h文件,在
#if !defined( PTHREAD_H )
#define PTHREAD_H
下面加上一行宏定义
#define HAVE_STRUCT_TIMESPEC
可以解决“timespec”:“struct”类型重定义错误

至此,已经可以在VS2017中使用。如果不想改动到VS2017的目录和系统目录,可以通过配置工程项目属性,设置附加包含目录/链接器附加依赖库等选项,从而达到使用pthread库的目的。


GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐