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下载

pthreads-win32官方网站:https://sourceware.org/pthreads-win32/

在官网上可以找到下载地址,或者点击下面链接下载合适的版本
ftp://sourceware.org/pub/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”)使主线程暂停。

编译运行可以发现两条线程正常工作,更深入用法请参考官方提供的文档。

这里写图片描述

项目源码:http://download.csdn.net/detail/rongbo_j/8599007

转载于:https://www.cnblogs.com/lanzhi/p/6468999.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值