zoukankan      html  css  js  c++  java
  • 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)libx86配置属性->链接器->输入->附加依赖项 中添加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

  • 相关阅读:
    让UILabel的大小自适应字符串长度
    Cocos2dx中的分辨率学习
    关键帧动画-五角星动画-在层上画出五角星
    .net WINFORM 界面怎么做凹凸效果的分割线?就是横线
    游标Cursor 使用小例 (SQLServer)
    winform屏蔽Alt+F4组合键以防止用户关闭对话框
    SQL Server 2005 数据类型和.Net数据类型的对应关系
    php $GLOBALS 超全局变量的理解
    我改行了
    PHP $_FILES详解
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468999.html
Copyright © 2011-2022 走看看