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”)使主线程暂停。
编译运行可以发现两条线程正常工作,更深入用法请参考官方提供的文档。
Windows平台下使用pthreads开发多线程应用的更多相关文章
- Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE
Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建
大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版 作者:张子良 版权所有,转载请注明出处 引子 ...
- 「C语言」在Windows平台搭建C语言开发环境的多种方式
新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于 Windows 平台搭建C语言集成开发环境 ...
- Windows平台下搭建Git服务器的图文教程
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在window ...
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- Windows平台下源码分析工具
最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...
- Windows平台下搭建Git服务器的图文教程(转发)
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在window ...
随机推荐
- Linux CentOs6.5误卸载自带python和yum后的解决办法
事故背景:前几天因项目需要,在服务器上搭建python-mysql模块,结果没安装好,于是乎想卸载重装,遂在网上查询卸载python的方法,结果一不小心直接把系统的python删了个干净....... ...
- Maven copy方式列举
maven copy有很多种方法: 1.maven-antrun-plugin (使用ant复制) <build> <finalName>flex</finalName& ...
- HTTP——学习笔记(7)
HTTP中的认证机制 什么是认证机制?: 服务器需要知道客户端是谁. 怎样知道客户端身份?: 核对“登录者本人才知道的信息” 密码:只有本人才会知道的字符串信息 动态令牌:仅限本人持有的设备内显示的一 ...
- 05003_Linux的基本命令
1.目录结构 Linux的目录结构:Linux各目录及每个目录的详细介绍 链接:Linux各目录及每个目录的详细介绍 密码:84ab 2.LInux的基本命令 (1)目录切换命令 ①root是超级管理 ...
- OpenStack 与 大数据的融合
此处是hadoop 2.7.2以前 Hadoop 预留的一个 HDFS 文件系统的接口. 可以通过修改这里 将数据源的读取改为 Swift. 也可以通过修改 MR 源码 将数据抽取部分变换成 ...
- LeetCode 之 Merge Sorted Array(排序)
[问题描写叙述] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...
- HDU4825:Xor Sum 解题报告(0/1 Trie树)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数. 随后 Prometheus 将向 Ze ...
- 7.stack
#include <iostream> #include <stack> #include <algorithm> #include <list> #i ...
- java连接操作Oracle
package com.sp.test; import java.sql.*; import java.util.*; public class Text_lianxi extends Thread ...
- Android 代码中使用Color工具类 parseColor
方式一: arg1.setBackgroundColor(Color.parseColor("#87CEFA")); 方式二: arg1.setBackgroundColor(ge ...