1. POSIX 线程局限性 : 在 Android , Linux , UNIX , MAC 中可以直接使用 POSIX , Windows 不可以直接使用 ;
2. Windows 配置 POSIX 线程 : 在 Visual Studio 上使用 POSIX 线程 , 需要引入第三方动态库 ;
1. 下载 : POSIX 线程 Windows 配置文件下载地址 :
2. Pre-built.2 目录下的相关文件说明 :
下图是 64 位动态库 :
下图是 32 位 动态库 :
动态库与静态库文件说明 :
1. 拷贝文件 : 将 Pre-built.2 目录下的 include 和 lib 两个目录拷贝到 CMakeLists.txt 所在目录中 ;
2. CMake 配置 引入头文件 :
#引入头文件
include_directories("include")
3. CMake 配置 静态库 : 用于引导如何链接动态库和静态库 , 这里配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录 ;
#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
set(platform x64)
else()
set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")
4. CMake 配置链接库 : 链接生成的 005_Thread 和线程动态库 , 线程动态库是 lib/x64 下的 pthreadVC2.lib ;
#链接生成的 005_Thread 和线程动态库名字
# 动态库是 lib/x64 下的 pthreadVC2.lib
target_link_libraries(005_Thread pthreadVC2)
#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")
6. 完整的 CMakeLists.txt 配置 :
# CMakeList.txt: 005_Thread 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
#引入头文件
include_directories("include")
#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
set(platform x64)
else()
set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")
#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")
# 将源代码添加到此项目的可执行文件。
add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")
#链接生成的 005_Thread 和线程动态库名字
# 动态库是 lib/x64 下的 pthreadVC2.lib
target_link_libraries(005_Thread pthreadVC2)
# TODO: 如有需要,请添加测试并安装目标。
上面的内容是项目配置内容, 下面是 Windows 系统配置内容 ;
拷贝 .dll 动态库到 Windows 系统中 , 如果 Windows 系统中没有对应的动态库 , 运行时会报错 ;
1. 64 位的 .dll 动态库 : 将 Pre-built.2\dll\x64 目录下的两个 64 位 .dll 动态库 ( pthreadGC2.dll 和 pthreadVC2.dll ) 拷贝到 C:\Windows\System32 目录中 ;
2. 32 位的 .dll 动态库 : 将 Pre-built.2\dll\x86 目录下的 5 个 32 位 .dll 动态库 ( pthreadGC2.dll , pthreadGCE2.dll , pthreadVC2.dll , pthreadVCE2.dll , pthreadVSE2.dll ) 拷贝到 C:\Windows\SysWOW64 目录中 ;
线程使用代码 :
// 005_Thread.cpp: 定义应用程序的入口点。
//
#include "005_Thread.h"
#include <pthread.h>
using namespace std;
int main()
{
cout << "Hello CMake。" << endl;
//测试 POSIX 线程方法
pthread_self();
return 0;
}
CMake 配置文件 :
# CMakeList.txt: 005_Thread 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
#引入头文件
include_directories("include")
#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
set(platform x64)
else()
set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")
#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")
# 将源代码添加到此项目的可执行文件。
add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")
#链接生成的 005_Thread 和线程动态库名字
# 动态库是 lib/x64 下的 pthreadVC2.lib
target_link_libraries(005_Thread pthreadVC2)
# TODO: 如有需要,请添加测试并安装目标。
运行结果 :