1. 程式人生 > WINDOWS開發 >Win10+VS2012配置pthread

Win10+VS2012配置pthread

0、pthread原始碼下載:https://sourceware.org/pthreads-win32/

1、下載pthreads-w32-2-9-1-release.zip完畢後,解壓,內容如下

技術分享圖片

其中,【Pre-built.2】是pthreads for win32的標頭檔案和庫檔案,【pthreads.2】是原始碼,【QueueUserAPCEx】是一個驅動,需要WDK支援編譯。

2、將【.\pthreads-w32-2-9-1-release\Pre-built.2\include】目錄下的標頭檔案拷貝到VS2017的安裝目錄,當前環境下是【C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include

技術分享圖片

3、把【.\pthreads-w32-2-9-1-release\Pre-built.2\lib】下的靜態庫檔案拷貝到VS2017的安裝目錄,當前環境下是【C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\lib】,x86和x64對

技術分享圖片

4、把【.\pthreads-w32-2-9-1-release\Pre-built.2\dll】下的動態庫檔案拷貝到系統目錄下,x86資料夾中的檔案對應C:\Windows\SysWOW64目錄,x64資料夾中的檔案對應C:\Windows\System32目錄

技術分享圖片

也可以在某個專案中引用該庫,或者用更加時髦的Nuget也可以找到這個庫。

配置好後,可用以下程式碼進行測試:

 1 #include "pch.h"
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <pthread.h>
 5 #include <assert.h>
 6 
 7 #pragma comment(lib,"x86/pthreadVC2.lib")
 8 
 9 void* Function_t(void* Param)
10 {
11     std::cout << "
多執行緒 " << std::endl; 12 pthread_t myid = pthread_self(); 13 std::cout << "執行緒ID=" << myid.x << std::endl; 14 return NULL; 15 } 16 17 int main(int argc,const char *argv[]) 18 { 19 pthread_t pid; 20 pthread_attr_t attr; 21 pthread_attr_init(&attr); 22 pthread_attr_setscope(&attr,PTHREAD_SCOPE_PROCESS); 23 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); 24 pthread_create(&pid,&attr,Function_t,NULL); 25 std::cout << "======================================== " << std::endl; 26 getchar(); 27 pthread_attr_destroy(&attr); 28 return 0; 29 }

如果在編譯時報錯【C2011 “timespec”:“struct”型別重定義】,原因是【pthread.h 中的 timespec 和 time.h 中的結構定義重複了,同時兩個標頭檔案中的編譯條件不同,造成了結構的重複定義】,

解決方案:

在 #if !defined( PTHREAD_H )
#define PTHREAD_H 下面加上 #define HAVE_STRUCT_TIMESPEC 注意:使用時要在檔案開頭加上
#pragma comment(lib,"x86/pthreadVC2.lib")