1. 程式人生 > >Windows平臺下使用pthreads開發多執行緒應用

Windows平臺下使用pthreads開發多執行緒應用

pthreads簡介

POSIX 1003.1-2001標準定義了編寫多執行緒應用程式的API(應用程式程式設計介面),這個介面通常被稱為pthreads。在常見的作業系統中,例如Unix、Linux、MacOS等都使用pthreads作為作業系統的執行緒。
Windows作業系統和其他平臺不同,並不是與生俱來的就支援phreads,使用Win32或MFC編寫過應用程式的朋友應該都知道,Windows平臺可以通過系統對外提供的執行緒相關函式(例如CreateThread、TerminateThread等)建立多執行緒應用。

使用Windows API編寫應用沒有什麼問題,但是當我們想編寫跨平臺應用時就顯得有點困難。幸運的是phreads目前存在一套Windows平臺下的移植版本,稱為pthreads-win32。接下來筆者將使用Visual Studio2012作為開發工具,簡單的介紹在Win32平臺下如何使用這套執行緒庫。

pthreads-win32下載

筆者使用的是2.9.1版本,解壓後可以看到Pre-built.2和pthreads.2資料夾。Pre-built.2為編譯好的庫檔案和標頭檔案,也是我們將要用到的,pthreads.2目錄下為原始碼。

pthreads-win32使用

1.使用VS2012建立控制檯應用,將字符集設定為多位元組字符集。

2.將Pre-built.2目錄下的include和lib資料夾拷貝到解決方案根目錄下。如下圖所示:
這裡寫圖片描述
3.在專案上點選右鍵選擇屬性,配置屬性->VC++目錄 下的包含目錄新增$(SolutionDir)include庫目錄

新增$(SolutionDir)lib\x86配置屬性->連結器->輸入->附加依賴項 中新增pthreadVC2.lib

4.編寫測試程式碼如下:

#include "stdafx.h"
#include <pthread.h>
#include <iostream>
//供執行緒休眠函式pthread_delay_np使用
struct timespec delay = {2 ,0};
void* print_task_1(void* )
{
    while(true)
    {
        std::cout<<"print_task_1 function is called!"
<<std::endl; pthread_delay_np(&delay); } } void* print_task_2(void* ) { while(true) { std::cout<<"print_task_2 function is called!"<<std::endl; pthread_delay_np(&delay); } } int _tmain(int argc, _TCHAR* argv[]) { pthread_t handle[2]; if(pthread_create(&handle[0],0,print_task_1,0)) { std::cout<<"thread create failed!"<<std::endl; return EXIT_FAILURE; } if(pthread_create(&handle[1],0,print_task_2,0)) { std::cout<<"thread create failed!"<<std::endl; return EXIT_FAILURE; } system("pause"); return 0; }

在main函式中,我們通過pthread_create建立兩個執行緒,執行緒處理函式print_task_1和print_task_2每休息2s後不斷向控制檯輸出語句。呼叫system(“pause”)使主執行緒暫停。

編譯執行可以發現兩條執行緒正常工作,更深入用法請參考官方提供的文件。

這裡寫圖片描述