Windows平臺下使用pthreads開發多線程應用

pthreads簡介

POSIX 1003.1-2001標準定義了編寫多線程應用程序的API(應用程序編程接口),這個接口一般被稱爲pthreads。在常見的操做系統中,例如Unix、Linux、MacOS等都使用pthreads做爲操做系統的線程。
Windows操做系統和其餘平臺不一樣,並非與生俱來的就支持phreads,使用Win32或MFC編寫過應用程序的朋友應該都知道,Windows平臺能夠經過系統對外提供的線程相關函數(例如CreateThread、TerminateThread等)建立多線程應用。html

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

pthreads-win32下載

pthreads-win32官方網站:https://sourceware.org/pthreads-win32/編程

在官網上能夠找到下載地址,或者點擊下面連接下載合適的版本
ftp://sourceware.org/pub/pthreads-win32markdown

筆者使用的是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」)使主線程暫停。測試

編譯運行能夠發現兩條線程正常工做,更深刻用法請參考官方提供的文檔。網站

這裏寫圖片描述

項目源碼:http://download.csdn.net/detail/rongbo_j/8599007

相關文章
相關標籤/搜索