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 ...
随机推荐
- MAVEN flex
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- ajax异步刷新
前台js <script type="text/javascript"> function getLands() { $.ajax({ url:"httpse ...
- android-async-http二次封装和调用
Android android-async-http二次封装和调用 在开发过程中,网络请求这块的使我们常常遇到的一个问题,今天去github 站点上面学习android-async-http,认为还 ...
- TCP/IP、UDP、 Http、Socket的差别
网络由上往下分为: 表示层和应用层 :HTTP协议(基于传输层的TCP协议,主要解决怎样包装数据) 会话层 传输层: TCP协议(基于网络层的IP协议).TPC/IP协议(主要解决数据怎样在网络中传输 ...
- h5登录
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Con ...
- 51nod-1131: 覆盖数字的数量
[传送门:51nod-1131] 简要题意: 给出A,B,表示有一个区间为A到B 给出X,Y,表示有一个区间为X到Y 求出X到Y中能够被A到B中的数(可重复)相加得到的不同的数的个数 题解: 乱搞题, ...
- 21.hash_map(已被废弃不再使用 被unordered_map代替)
#include <string> //老版本的unordered_map(已经废弃不再使用) #include <hash_map> #include <iostrea ...
- 使用google API之前需要對input 做什麼 安全性的處理?
我正要使用node.js 和 google map api做一个小应用,Google MAP API的使用URL如下: https://maps.googleapis.com/maps/api/pla ...
- Java hashCode(), equals()
转自:http://blog.csdn.net/fenglibing/article/details/8905007冯立彬的博客 以下是关于HashCode的官方文档定义: hashcode方法返回该 ...
- ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(上)
前言 在上篇文章中,详细分析了RACSignal是创建和订阅的详细过程.看到底层源码实现后,就能发现,ReactiveCocoa这个FRP的库,实现响应式(RP)是用Block闭包来实现的,而并不是用 ...