详解boost库中的Message Queue

详解boost库中的Message Queue
详解boost库中的Message Queue

Message Queue(后文简写成MQ或消息队列)是boost库中用来封装进程间通信的一种实现,同一台机器上的进程或线程可以通过消息队列来进行通迅。消息队列中的消息由优先级、消息长度、消息数据三部分组成。这里需要注意的事,MQ只是简单的将要发送的数据在内存中进行拷贝,所以我们在发送复杂结构或对象时,我们需要将其序列化后再发送,接收端接收时要反序列化,也就是说我们要自己去定义区分一条消息(就是自定义网络通迅协议)。在MQ中,我们可以使用三模式去发送和接收消息:

1.阻塞:在发送消息时,若消息队列满了,那么发送接口将会阻塞直到队列没有满。

在接收消息时,若队列为空,那么接收接口也会阻塞直到队列不空。

2.超时:用户可以自定义超时时间,在超时时间到了,那么发送接口或接收接口都会

返回,无论队列满或空

3.Try:在队列为空或满时,都能立即返回

MQ使用命名的共享内存来实现进程间通信。共享内存换句话来说,就是用户可以指定一个名称来创建一块共享内存,然后像打一个文件一样去打开这块共享内存,同样别的进程也可以根据这个名称来打开这块共享内存,这样一个进程向共享内存中写,另一个进程就可以从共享内存中读。这里两个进程的读写就涉及到同步问题。另外,在创建一个MQ时,我们需要指定MQ的最大消息数量以及消息的最大size。

//Create a message_queue. If the queue

//exists throws an exception

message_queue mq

(create_only //only create

,"message_queue" //name

,100 //max message number

,100 //max message size

);

using boost::interprocess;

//Creates or opens a message_queue. If the queue

//does not exist creates it, otherwise opens it.

//Message number and size are ignored if the queue

//is opened

message_queue mq

(open_or_create //open or create

,"message_queue" //name

,100 //max message number

,100 //max message size

);

using boost::interprocess;

//Opens a message_queue. If the queue

//does not exist throws an exception.

message_queue mq

(open_only //only open

,"message_queue" //name

);

使用message_queue::remove("message_queue");来移除一个指定的消息队列。

接下来,我们看一个使用消息队列的生产者与消息者的例子。第一个进程做为生产者,第二个进程做为消费者。

生产者进程:

#include

#include

#include

using namespace boost::interprocess;

int main ()

{

try{

//Erase previous message queue

message_queue::remove("message_queue");

//Create a message_queue.

message_queue mq

(create_only //only create

,"message_queue" //name

,100 //max message number

,sizeof(int) //max message size

);

//Send 100 numbers

for(int i = 0; i < 100; ++i){

mq.send(&i, sizeof(i), 0);

}

}

catch(interprocess_exception &ex){

std::cout << ex.what() << std::endl;

return 1;

}

return 0;

}

消费者进程:

#include

#include

#include

using namespace boost::interprocess;

int main ()

{

try{

//Open a message queue.

message_queue mq

(open_only //only create

,"message_queue" //name

);

unsigned int priority;

message_queue::size_type recvd_size;

//Receive 100 numbers

for(int i = 0; i < 100; ++i){

int number;

mq.receive(&number, sizeof(number), recvd_size, priority); if(number != i || recvd_size != sizeof(number))

return 1;

}

}

catch(interprocess_exception &ex){

message_queue::remove("message_queue");

std::cout << ex.what() << std::endl;

return 1;

}

message_queue::remove("message_queue");

return 0;

}

boost库的介绍

Boost是什么?一套开放源代码、高度可移植的C++库。 谁发起的?C++标准委员会库工作组。所以,质量保证,不怕遇到假冒伪劣产品。 Boost内容广泛,数值计算、泛型编程、元编程、平台API……不妨从容选择自己感兴趣的部分,细细品味。 有些什么呢?瞧瞧: 字符串及文本处理 Boost.Regex 正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。Regex已被即将发布的Library Technical Report接受。更多的信息,请见"Library 5: Regex.". Boost.Spirit Spirit库是一个多用途的、递归的语法分析器生成框架。有了它,你可以创建命令行分析器,甚至是语言预处理器[1]。它允许程序员直接在C++代码里使用(近似于)EBNF的语法来指定语法规则。分析器非常难写,对于一个特定的问题,它们很快就变得难于维护和看懂。而Spirit解决了这些问题,而且达到了与手工制作的分析器一样或几乎一样的性能。 Boost.String_algo 这是一组与字符串相关的算法。包括很多有用的算法,用于大小写转换,空格清除,字符串分割,查找及替换,等等。这组算法是目前C++标准库里已有功能的扩展。 Boost.Tokenizer 这个库提供了把字符序列分割成记号(token)的方法。通用的语法分析任务包括了在已分割的文本流里查找数据。如果可以把字符序列视为多个元素的容器将很有帮助,容器中的元素被执照用户定义的规则所分割。语法分析就成为了在这些元素上进行操作的单个任务,Tokenizer正好提供了这种功能。用户可以决定字符序列如何被分割,在用户请求新的元素时,库将找出相应的记号。 数据结构, 容器, 迭代器, 和算法 Boost.Any Any库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:

初学者 你应当如何学习C 以及编程

初学者,你应当如何学习C 以及编程 软件小兵 ruanjianxiaobing@sohu 作者:未知文章来源:天极Yesky软件频道 Javascript是世界上最受误解的语言,其实C 何尝不是。坊间流传的错误的C 学习方法一抓就是一大把。我自己在学习C 的过程中也走了许多弯路,浪费了不少时间。 为什么会存在这么多错误认识?原因主要有三个,一是C 语言的细节太多。二是一些著名的C 书籍总在(不管有意还是无意)暗示语言细节的重要性和有趣。三是现代C 库的开发哲学必须用到一些犄角旮旯的语言细节(但注意,是库设计,不是日常编程)。这些共同塑造了C 社群的整体心态和哲学。 单是第一条还未必能够成气候,其它语言的细节也不少(尽管比起C 起来还是小巫见大巫),就拿Javascript来说,作用域规则,名字查找,closure, for/in,这些都是细节,而且其中还有违反直觉的。但许多动态语言的程序员的理念我猜大约是学到哪用到哪罢。但C 就不一样了,学C 之人有一种类似于被暗示的潜在心态,就是一定要先把语言核心基本上吃透了才能下手写出漂亮的程序。这首先就错了。这个意识形成的原因在第二点,C 书籍。市面上的C 书籍不计其数,但有一个共同的缺点,就是讲语言细节的书太多——《C gotchas》,《Effective C 》,《More Effective C 》,但无可厚非的是,C 是这样一门语言:要拿它满足现代编程理念的需求,尤其是C 库开发的需求,还必须得关注语言细节,乃至于在C 中利用语言细节已经成了一门学问。比如C 模板在设计之初根本没有想到模板元编程这回事,更没想到C 模板系统是图灵完备的,这也就导致了《Modern C Design》和《C Template Metaprogramming》的惊世骇俗。 这些技术的出现为什么惊世骇俗,打个比方,就好比是一块大家都认为已经熟悉无比,再无秘密可言的土地上,突然某天有人挖到原来地下还蕴藏着最丰富的石油。在这之前的C 虽然也有一些细节,但也还算容易掌握,那可是C 程序员们的happy old times,因为C 的一切都一览无余,everything is figured out。然而《Modern C Design》的出世告诉人们,“瞧,还有多少细节你们没有掌握啊。”于是C 程序员们久违的激情被重燃起来,奋不顾身的踏入细节的沼泽中。尤其是,模板编程将C 的细节进一步挖掘到了极致——我们干嘛关心涉及类对象的隐式转换的优先级高低?看看boost::is_base_of就可以知道有多诡异了。 但最大的问题还在于,对于这些细节的关注还真有它合适的理由:我们要开发现代模板库,要开发active library,就必须动用模板编程技术,要动用模板编程技术,就必须利用语言的犄角旮旯,enable_if,type_traits,甚至连早就古井

心跳检测(应用Boost库)

毕业设计(论文) 题目 学院名称计算机科学与技术学院 指导教师 职称 班级本07计算机01班 学号 学生姓名

目录

摘要 随着Internet快速发展,大量的P2P出现给人们的生活交流带来许多便利。然而由于人们需求的不断提高,对于P2P系统的可靠安全行性,同时也提出了新的要求。对于覆盖世界的网络中,随时都有可能出现故障。对于研究者希望 P2P系统有自动检测到故障的原因自动修复的功能。在这方面许多人都在不断的进行研究实验。 本文研究的主要方面是P2P存储系统与故障维护中的心跳检测技术。心跳检测技术是一种检测网络连接故障的技术,根据服务端和客户端各自的心跳检测软件,相互之间发送消息即心跳报文来检测故障,判断网络连接是否正常,系统是否工作。这篇论文设计了一个能管理几百个外围节点的心跳检测系统。该系统是在Linux操作系统下,采用的TCP/UDP协议,以C/S模式,应用Boost库,以C++语言进行开发的。服务端为主控节点,客户端为外围节点,通过客户端发送心跳报文的方法来实现心跳检测。 关键词:P2P;心跳检测;Boost;Linux

ABSTRACT Along with the Internet fast development, massive P2P appears for people's life exchange brings many conveniences. However, as a result of the people demand's unceasing enhancement, regarding the P2P system's reliable security line, simultaneously also set the new request. Regarding in the cover world's network, It has the possibility to present the breakdown. Regarding the researcher hoped that the P2P system has the automatic detection breakdown reason and the automatic repair function. In this aspect many people are researching. This paper mainly researches the heart beat technology of P2P memory system and failure detection. Heat beat technology is the technology that it detects network fault, as sending messages between server and client. And it can estimate whether the network and P2P system are working naturally. The paper introduces the P2P system can manage hundreds of the client nodes . The system designs in the Linux platform, using TCP/UDP protocol, Boost libraries, C++ language and on the basis of C/S model. Server acts as the master node, the client acts as the external nodes, through the heart beat messages sent by the client to achieve the heart beat detection methods.

VC6.0下配置boost库

VC6.0下配置boost库 2008-10-11 09:18 https://www.360docs.net/doc/d514569960.html,/yysdsyl/archive/2007/09/12/1781546.aspx 最近做开发碰到了长字符串匹配、搜索的问题,最先想到的是使用正则表达式,简单、高效。 但是我用的开发工具是VC6.0,不支持正则表达式。 上网baidu一下,发现支持正则的库还真不少,大概有以下几种:boost,GNU,VC7带的ATL 中的和微软发布的greta。 网上的朋友对boost评价不错,决定就使用是它了! 1、接下来的就是下载boost库,网上很好找。我下载的是压缩包,20多M,解压后将近100多M。 我解压的目录是D:\boost 2、然后是编译,我只要支持正则表达式就可以,因此只需要编译 D:\boost\libs\regex\build目录下的文件。据说全部编译要花将近2个小时,没有验证过,在我家里的机器上编译正则表达式部分只用了不到5分钟。 网上介绍的如何编译最多的一篇文章是“VC利用boost库解析正则表达式”,如果有人能根据这篇文章编译成功不妨告诉小弟一声…… 以下是我的操作: 在“运行”里输入“cmd”,打开命令提示符; 输入命令“cd D:\boost\libs\regex\build”//设置当前目录 输入命令“D:”//转到当前目录 接下来是很关键的一步: 很多文章是这样说的“输入 nmake -fvc6.mak” 但是出现了“'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的错误提示。 然后你就会拼命查找原因,结果又有文章上说是环境变量没配置好,然后给出一堆“set”。也有的文章说是运行一下visual studio安装目录下的VC98\Bin\VCVARS32.BAT文件就OK 了。 你按照文章作者的方法做的,结果发现问题依旧! 以上说法都是正确的,但是说得都不是很完整,出现错误提示的根本原因就是环境变量没配置好,不识别nmake命令,配置过jdk的朋友就很容易明白。如果按照作者的要求搞一堆“set”,未免大题小作了吧,因为我们只需要用一次'nmake' 就可以解决问题了。VCVARS32.BAT正式配置环境变量的批处理文件,但是配置的参数只在当前窗口有效,也就

了解 Boost Filesystem Library

了解 Boost Filesystem Library C++语言(实际上是C++标准)的最常见问题之一是,缺乏定义良好的库来帮助处理文件系统查询和操作。由于这个原因,程序员不得不使用本机操作系统提供的应用程序编程接口(Application Program Interfaces,API),而这使得代码不能在平台之间移植。以下面的简单情况为例:您需要确定某个文件是否是Directory 类型。在Microsoft? Windows? 平台中,可以通过调用GetAttributes库函数(在windows.h 头文件中定义)进行此操作: DWORD GetFileAttributes (LPCTSTR lpFileName); 对于目录,所得到的结果应该为FILE_ATTRIBUTE_DIRECTORY,而您的代码必须检查是否为此结果。在UNIX? 和Linux? 平台上,可以通过使用stat或fstat函数及sys/stat.h 中定义的S_ISDIR 宏来实现相同的功能。您还必须理解stat结构。下面是对应的代码: #include #include int main() { struct stat s1; int status = stat(, &s1); printf(“Path is a directory : %d\n”, S_ISDIR(s1.st_mode)); return 0; } 对于I/O 操作较多的程序,这样的不一致就意味着需要进行大量的工程工作才能在平台间移植代码。正是因为这个原因,我们才引入了Boost Filesystem Library。这个广泛使用的库提供了安全、可移植且易用的C++接口,用于执行文件系统操作。可以从Boost站点免费下载此库。 使用boost::filesystem 的第一个程序 在深入研究Boost Filesystem Library 的更多细节之前,请看一下清单1中所示的代码;此代码使用Boost API 确定某个文件的类型是否为Directory。 清单1. 用于确定某个文件的类型是否为Directory 的代码 #include #include “boost/filesystem.hpp” int main() { boost::filesystem::path path("/usr/local/include"); // random pathname bool result = boost::filesystem::is_directory(path); printf(“Path is a directory : %d\n”, result); return 0; } 此代码非常明了易懂,您并不需要了解任何系统特定的例程。此代码经过验证,能在不用修改的情况下在gcc-3.4.4 和cl-13.10.3077 上成功编译。

VS2010 C++下编译调试MongoDB源码

VS2010 C++下编译调试 MongoDB源码 考虑到m ongodb使用了boost库源码,参考m ongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本: boost版本1.42: https://www.360docs.net/doc/d514569960.html,/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download 下载boost源码之后,我把boost解压在D盘。 1.在D:\boost_1_42_0\下找到该批处理文件bootstrap.bat,以vs2010命令行方式运行它,并最终生成bjam.exe可执行文件(详细结果及错误信息见生成的bjam.log日志)。 2.将生成的bjam.exe文件拷贝到“D:\boost_1_42_0”目录下,运行下面命令行: bjam stage variant=debug --stagedir="d:\boost_1_42_0" --with-files ystem --with-thread --with-date_time --with-program_options --layou t=versioned threading=multi toolset=msvc-10.0 如下 图:

注:i.如果要生成release链接库文件,需将上面的variant设置成release,形如:bjam stage variant=release ..... ii.如果要全部生成使用下面编译选项 bjam ...... --build-type=com plete 编译过程可能会用一些时间,最终会在"D:\boost_1_42_0" 生成一个lib目录,里面包括刚生成的库文件。 3.下载已用vs2010编译的SpiderMonkey库文件及源码包,并将其解压到D盘下,下载链接: https://https://www.360docs.net/doc/d514569960.html,/dwight/vc2010_js 将该文件夹名称改为“js”(因为m ongodb项目会默认指定该路径寻找可用的lib及c源文件),

boost升压电路

一种实用的BOOST电路 0 引言 在实际应用中经常会涉及到升压电路的设计,对于较大的功率输出,如70W以上的DC /DC升压电路,由于专用升压芯片内部开关管的限制,难于做到大功率升压变换,而且芯片的价格昂贵,在实际应用时受到很大限制。考虑到Boost升压结构外接开关管选择余地很大,选择合适的控制芯片,便可设计出大功率输出的DC/DC升压电路。 UC3842是一种电流型脉宽调制电源芯片,价格低廉,广泛应用于电子信息设备的电源电路设计,常用作隔离回扫式开关电源的控制电路,根据UC3842的功能特点,结合Boos t拓扑结构,完全可设计成电流型控制的升压DC/DC电路,且外接元器件少,控制灵活,成本低,输出功率容易做到100W以上,具有其他专用芯片难以实现的功能。 1 UC3842芯片的特点 UC3842工作电压为16~30V,工作电流约15mA。芯片内有一个频率可设置的振荡器;一个能够源出和吸入大电流的图腾式输出结构,特别适用于MoSFET的驱动;一个固定温度补偿的基准电压和高增益误差放大器、电流传感器;具有锁存功能的逻辑电路和能提供逐个脉冲限流控制的PWM比较器,最大占空比可达100%。另外,具有内部保护功能,如滞后式欠压锁定、可控制的输出死区时间等。 由UC3842设计的DC/DC升压电路属于电流型控制,电路中直接用误差信号控制电感峰值电流,然后间接地控制PWM脉冲宽度。这种电流型控制电路的主要特点是: 1)输入电压的变化引起电感电流斜坡的变化,电感电流自动调整而不需要误差放大器输出变化,改善了瞬态电压调整率; 2)电流型控制检测电感电流和开关电流,并在逐个脉冲的基础上同误差放大器的输出比较,控制PWM脉宽,由于电感电流随误差信号的变化而变化,从而更容易设置控制环路,改善了线性调整率; 3)简化了限流电路,在保证电源工作可靠性的同时,电流限制使电感和开关管更有效地工作; 4)电流型控制电路中需要对电感电流的斜坡进行补偿,因为,平均电感电流大小是决定输出大小的因素,在占空比不同的情况下,峰值电感电流的变化不能与平均电感电流变化相对应,特别是占空比,50%的不稳定性,存在难以校正的峰值电流与平均电流的误差,即使占空比<50%,也可能发生高频次谐波振荡,因而需要斜坡补偿,使峰值电感电流与平均电感电流变化相一致,但是,同步不失真的斜坡补偿技术实现上有一定的难度。

boostlog

Boost Log 简介 Boost Log Overview VIM Research Group 先进感知与控制实验室 中国科学技术大学信息科学技术学院 2015年2月

修改记录 Index Author Revision Date Remark 1 江坤V1.0 2014-02-09 初始版本

1. 安装 (4) 1.1. 软硬件需求 (4) 1.1.1.软件需求 (4) 1.1.2.硬件需求 (4) 1.2. 安装流程 (4) 2. Boost log 简介 (5) 3. Boost Log 基本使用流程 (6) 3.1. 案例一:Boost Log简单输出到控制台 (6) 3.2. 案例二:Boost Log简单输出到控制台 (7) 3.3. 案例三:Boost Log简单输出到控制台 (7) 4. 结论 (9)

本文档用于描述boost log 的安装,日常使用以及功能扩展。 1.安装 本部分描述boost 1.57.0的安装方法。 1.1.软硬件需求 1.1.1.软件需求 安装boost库的主机需支持GCC和GCC-C++之外,还需要两个开发库:bzip2-devel 和python-devel。 1.1. 2.硬件需求 运行Ubuntu12.04操作系统的主机一台。 1.2.安装流程 首先于Boost Libraries的官网下载Boost 1.57.0的安装包,下载地址如下http://www.boost .org/users/history/version_1_57_0.html。然后解压缩,进入到boost_1_57_0的目录下。 若在本机之前已安装过老版本的boost库,需要将之前include文件夹下和动态库中boost 库的相关文件删除,然后再编译安装,由于boost源码包中自带配置脚本,可直接使用,即运行booststrap.sh这个脚本配置。然后按照提示信息,输入sudo ./b2指令编译,然后就是漫长的等待,等待其是否编译成功。当输出如下信息表明编译成功: 若为安装成功需按照提示信息做相应处理,若未安装bzip2-devel 或python-devel会提示报错此时需安装相应的库,再重新安装。 最后运行./b2 install --prefix=/usr/local指令完成boost库的安装,安装后的头文件在 /usr/local/include/boost里面,而相应的库在/usr/local/lib/libboost_*。

高升压比交错并联Boost电路的分析

高升压比交错并联Boost电路的分析 类别:电源技术阅读:869 摘要:文章分析了传统BooST电路在实际应用中存在的问题,提出了一种改进型的交错并联Boost电路。在电感电流连续模式下,根据占空比大于或小于0。5的情况,详细分析电路的工作过程,推导了稳态情况下输出输入电压关系式,最后通过仿真验证了理论分析的正确性。0 引言升压变换器是最常用的一种变换器,随着新能源的推广,由于太阳能、燃料电池、蓄电池等输入源具有输入电压较低的特性,升压变换器成为不可或缺的关键部件。常用的非隔离Boost升压变换器,在高输出电压场合,由于寄生参数的影响不可能达到很高的输入输出电压比。而另一种升压电路是隔离升压电路,例如正激、反激电路。隔离升压电路中必须用到的变压器通常具有隔离、变压的功能,在那些不需要隔离或体积要求较小的应用场合,通过变压器升压就很难满足要求,另外变压器漏感引起的一系列问题,比如开关电压过冲,EMI等,常常对电源本身及周围设备带来安全隐患。 为了克服常用升压变换器在大功率、高输入输出变比等场合应用的限制,本文研究分析了一种新的电路拓扑结构及其工作方式,并对其进行了仿真验证。 1 工作原理下面分析Boost电路存在的不足,在理想情况下: M(D)=U0Uin= 11-D(1)根据式(1),在一定的输入电压下,理论上可以产生任意高于输入电压的输出电压。而实际情况中,由于电感、二极管、开关管都会产生一定的损耗,这些损耗可以等效为一个与电感串联的电阻RL,如图1所示: 图 1 Boost等效电路图此时根据磁平衡原理: 由式(2)、(3)可得:

根据式(4),在不同的RL/R 情况下,M(D)如图2所示。由此可见,在实际电路中,Boost电路升压比有限制极限,输出电压一般能达到输入电压的4~5倍。在大功率应用环境中,由于损耗严重,升压比反而更低。 为了克服上述非隔离升压电路的不足,本文研究的升压变换器如图3所示,它由交错并联Boost电路与电容串联组合而成。 图 2 升压比与占空比关系曲线图 图3 高升压比交错并联Boost电路结构图在电感电流连续模式下,当占空比大于0。5时,系统工作原理时序如图4所示,PS1、PS2分别为开关管S1、S2的驱动脉冲。ID1、ID2分别为流过续流二极管D1、D2的电流。

Windows版bjam的安装和配置

1、下载boost(或bjam)的源码,在命令行下执行如下命令: cd \tools\jam\src .\build.bat 其中指的是boost源码的根目录。这两条命令执行完毕,会产生一个bin.ntx86文件夹,里面含有一个编译生成的bjam.exe。将bjam.exe复制到C:\WINDOWS目录(或者PATH环境变量的其它取值)下。 2、在C:\Documents and Settings\All Users目录(或其它任意目录亦可)新建一个名为boost 的目录(取bjam或其它名字亦可,后面环境变量的值与此一致即可),将 \tools\build\v2目录及其前两级父目录复制到该boost目录里,则此时在C:\Documents and Settings\All Users\boost\tools\build\v2目录里可找到一个boost-build.jam文件,打开该文件并将boost-build的值改为: boost-build “C:/Documents and Settings/All Users/boost/tools/build/v2” ; 要注意此处的路径要用斜杠来隔开,但前面执行的命令涉及到的路径则用反斜杠隔开。另外,分号与前面的文字要有空格。 3、仍然在v2文件夹下,打开user-config.jam文件,找到以下一行: # using msvc ; 将“#”去掉。 4、添加BOOST_ROOT环境变量。具体操作为:右击“我的电脑”,选择“属性”->“高级”->“环境变量”,在“系统变量”方框下方点击“新建”,出现新建系统变量对话框。变量名填上BOOST_ROOT,变量值填上“C:\Documents and Settings\All Users\boost\tools\build\v2”(此路径即boost-build.jam所在的目录,注意要用英文环境下的双引号括起来)。至此,bjam 编译环境配置完成。 5、如果步骤4的环境变量不起作用,则用户的每个工程源码根目录必须存在一个步骤2修改好的boost-build.jam,bjam程序方可正常工作。但由于bjam会从工程根目录逐级搜索至工程所在磁盘分区根目录,若在每个磁盘分区根目录都复制一份boost-build.jam,则不管用户将工程源码放在什么地方,bjam程序都能正常读取boost-build.jam,然后编译工程了。 注意:在装bjam之前,必须保证系统中已安装了Visual Studio,否则无法编译出bjam.exe。如果想删除bjam,只需手动将C:\WINDOWS\bjam.exe、boost目录(用户创建的)和相关环境变量删除即可。 已发现及解决问题: 1、Visual Studio 2010的设置问题 如果系统安装的是Visual Studio 2010,则还需要向系统环境变量添加以下路径(假设VS安装在D盘): D:\Program Files\Microsoft Visual Studio 10.0\VC\bin 否则在编译bjam或者利用bjam编译用户工程时会报错,前者会提示找不到cl等命令,后者则会提示多个jam文件运行出错。

Boost编译和安装说明

Boost编译和安装说明 一、下载和安装 从官方主页https://www.360docs.net/doc/d514569960.html,下载最新版,因为boost一部分类是需要编译成库才能使用的,所以需要准备好boost专用的编译辅助工具bjam。可直接使用boost安装包中附带的bjam源码来编译出bjam。 将boost安装包解压到E:\boost_1_53_0,运行E:\boost_1_53_0\bootstrap.bat批处理,会复制E:\boost_1_53_0\tools\build\v2\engine\ bin.ntx86\bjam.exe到目录E:\boost_1_53_0\下,注意最后bjam.exe必须与boost-build.jam在同级目录。 二、编译 打开命令提示符(cmd.exe)窗口并执行bjam,使用--help查看命令帮助。bjam的命令行参数涉及具体库的选择,会影响编译后的硬盘空间。 使用bjam命令如:bjam stage --toolset=msvc-10.0 --without-python --without-wave --without-test --stagedir="E:\boost_1_53_0_vc10" link=shared runtime-link=shared threading=multi debug release 下面详细解释一下每个参数的含义: 1)stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的 include目录。推荐使用stage,因为install生成的这个include目录实际就是boost 安装包解压缩后的boost目录(E:\boost_1_53_0\boost,只比include目录多几个非hpp的小文件),可以直接使用,而且不同的IDE都可以使用同一套头文件。 2)toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)、 msvc-10.0(VS2010)等。 3)without/with:选择不编译/编译哪些库,默认是全部编译。例如,without-python意 思是不需要编译python库。如果选择编译python的话,应该到python官方主页 https://www.360docs.net/doc/d514569960.html,下载安装。 4)stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文 件的路径。如果使用了install参数,那么还将生成头文件目录。推荐给不同的IDE 指定不同目录 5)build-dir:编译生成的中间文件的路径。默认就在根目录(E:\boost_1_53_0)下,目 录名为bin.v2,等编译完成后可具体查看一下是否生成了lib、dll文件。如果不需要可直接删除bin.v2目录 6)link:生成动态链接库/静态链接库。动态链接库使用shared方式,静态链接库使用 static方式。注意,static方式下生成的很多静态链接库大小都在几兆、几十兆。不推荐以static方式编译(without掉),巨型库黑名单:wave、graph、math、regex、test、program_options、serialization、signals。 7)runtime-link:动态/静态链接C/C++运行时库,有shared和static两种方式,与link 参数组合有4种方式。但通常一个工程用动态链接那么所有库都用动态链接,如果用静态链接那么所有库都用静态链接。所以只需要编译2种组合即可,即link=shared runtime-link=shared和link=static runtime-link=static。 8)threading:单/多线程编译。一般使用多线程程序,要指定multi方式;如果需要单线 程环境,使用single方式。

Apache Mesos底层基础库

Apache Mesos底层基础库 Protocal Buffer是google开源的用于数据交换的库,常用于跨语言的数据访问,担任的角色一般为对象的序列化反序列化。另一个与之类似的开源软件是facebook开源的thrift,它们两个最大区别是thrift提供了自动生成RPC的功能而Protocal Buffer需要自己实现,但Protocal Buffer 的一个优势是其序列化反序列化非常高效。 AD: 1.Protocol buffer Protocal Buffer是google开源的用于数据交换的库,常用于跨语言的数据访问,担任的角色一般为对象的序列化反序列化。另一个与之类似的开源软件是facebook开源的thrift,它们两个最大区别是thrift提供了自动生成RPC的功能而Protocal Buffer需要自己实现,但Protocal Buffer 的一个优势是其序列化反序列化非常高效。 2.Libprocess libprocess是采用CC++编写的高效消息传递编程模型(基于消息传递的网络通信模型,而不是RPC),由伯克利开源。其整个实现非常简单,包括最基本的消息发送和接收等。 2.1Libprocess模型 在mesos中,主要有四个角色,分别是:mesos-master,mesos-slave,framework(HadoopSpark MPI等)scheduler,executor(在mesos-slave上执行framework task的组件),每种角色均是一个Process,在实现时会继承libprocess中的ProtobufProcess类(它又继承了Process类),这样,它们均会编成一个后台运行且不断监听protocal buffer消息的socket server,如下图所示: 2.2各种常用函数 Libprocess+protocol buffer组合是mesos最底层最重要的消息传递基础库(没有采用RPC机制),由于该库采用了基于Protocal Buffer消息传递的通信机制),因而非常高效。Mesos常用的两个头文件是libprocess\include\process下的process.hpp和protobuf.hpp,这两个提供了用于消息传递的API,其中process.hpp是最核心的文件水草玛瑙 https://www.360docs.net/doc/d514569960.html,,提供了原始的接口,而protobuf.hpp是在process.hpp基础上,加入了ProtocalBuffer对象参数,使ProtocalBuffer使用起来更加容易。 (1) install void install(void (T::*method)(P1C),P1 (M::*param1)() const); 安装一个处理ProtocalBuffer消息的handler,其中,消息类型是M,该消息对应的处理函数是method,函数参数为M::*param1。举例:mesos中slaveslave.cpp: install( Slave::newMasterDetected, NewMasterDetectedMessage::pid); 安装一个处理NewMasterDetectedMessage(ProtocalBuffer对象)的handler,mesos slave一旦接收到该消息,便会调用newMasterDetected函数处理,且该函数的输入参数是NewMasterDetectedMessage消息中的pid属性。 voidinstall(conststd::string name,void(T::*method)(constUPID ,conststd::string )) 安装一个处理字符串的handler,也就是说,当收到字符串name后,调用函数method进行处理。这个API在mesos中的典型应用时高山茶 https://www.360docs.net/doc/d514569960.html,维持master与slave之间的心跳,以确定彼此活着: 在slaveslave.cpp中: install( PING , Slave::ping);voidSlave::ping(constUPID from,conststring body){send(from, PONG } 在mastermaster.cpp中: install( PONG , SlaveObserver::pong);voidpong(constUPID from,conststring body){timeouts=0;pinged=false;}voidtimeout(){if(pinged){Sowehaven'tgotbackapongyet...if(++timeo uts =MAX_SLA VE_TIMEOUTS){deactivate();return;}}send(slave, PING );pinged=true;delay(SLA VE_PONG_TIMEOUT,self(), SlaveObserver::timeout);} (2) send voidsend(constprocess::UPID to,constgoogle::protobuf::Message message) 向某个UPID上发送消息,其中UPID代表一个socket,里面含有ip和port信息,而消息message

boost库编译

①打开你是boost_1_37_0文件夹 ②打开tools/jam/src ③点击build.bat 稍等一下会生成一个新的文件夹,打开里面有一个bjam.exe,复制它然后将它粘 贴到boost_1_37_0文件夹里面 然后打开vc2005的命令行:开始->所有程序->visualstudio 2005->visual sudio tools->命令提示(也就是那个黑色doc的标志) (许多人用cmd 那个doc命令,许多情况下是不行的,我就试过) 假如你的boost文件夹在E:/boost_1_37_0; 那么可以这样打命令: 1 E:然后回车 2 cd boost_1_37_0 然后回车 3 bjam.exe 然后回车 你的boost库就开始编译了,时间很长~ 剩下的别人也说得较为清楚,呵呵,;-), 我玩boost很久了,从1.34开始就一直玩,很不错 4 回答者:a_xr13800 - 二级 2009-1-7 22:01 我来评论>>提问者对于答案的评价: 谢谢哦 相关内容 ? boost 1_33_1 在VC6.0上的安装出现问题 2006-12-17 ? 1.0 bar boost是什么意思 2009-2-7 ? 笔记本《上、下、左、右,》键不起作用调不成boost引导顺序,怎样装系 统啊 2010-5-12 ? 联想Y460 I3 intel turbo boost technology device驱动装不了,是什么原 因 3 2010-8-1 ? 我的主板是技嘉770t-us3 装了easy tune 6 可是找不到easy boost 2010-4-28 等待您来回答更多 ?2回答为什么不用卫星来测控嫦娥二号? ?2回答xyhhdh商业理财 ?0回答最近刚买的房子,走的是商业贷款,现交完订金,马上就去交首付款,我... ?0回答用VS2008 新建一个MFC单文档工程,菜单里的改变应用程序外观是怎么实现... ?1回答visual studio 2008 SP1里有STL吗?? ?2回答各位编程爱好者,请帮我看看这道C语言题,将中缀表达式转化为后缀表达... ?2回答请问高手,汉武大帝第七集里贵妃们玩的什么游戏???

boost库命名规则的优点

boost库命名规则的优点 作者:朱金灿 来源:https://www.360docs.net/doc/d514569960.html,/clever101 我们编译出来的二进制库文件该如何命名呢?当我经验尚浅时,发现这个不 是问题——就以工程名来命名呗。但慢慢发现这种命名是有很多问题的(特别是当你升级编译器时,比如从VS 2005升级到VS2010时,或者是软件打包时):比如debug版本和release版本的库区分不开,不同版本的编译器编出的库区分不开(很多时候面对一个库你不知道它是VC6.0、VS 2005还是VS 2008编出来的),静态 库还是导入库区分不开,代码库的版本不知道……可能你会说:不是有个depends 工具,用它打开查看一下就知道了。问题一是假如库文件很多时,谁愿意一一去查看;二是静态库还是导入库靠depends工具是判断不出来的。而在开发时混用不同版本的库文件,会造成很多莫名其妙的问题。 如何解决这个问题?唯有靠规范的命名。怎样才算是规范的库文件命名?我觉得指导原则应该是见名知意。如果根据见名知意这个原则来衡量,我发现boost库 是做得比较规范的。关于boost库的命名规则,具体请见这篇文章:Boost 库命名 规则(翻译)。boost库的命名,涵括了下面几方面信息: 1.库的功能信息(即是序列化库、正则库还是其它功能的库) 2.静态库还是导入库(静态库以lib开头) 3.构建该库的具体编译器信息 4.线程标签(是多线程还是单线程) 5.影响库与其它编译代码的互操作性的细节的编码(debug版本还是release版 本,是否使用了STLPORT) 6.boost库的版本信息 面对这样规范的命名,你还会混用吗?据此我也简单制定了一个Windows环境下的库文件的命名规则: 静态库命名:lib+工程名_编译器信息_版本信息_互操作性细节信息.lib, 这里的互操作性细节信息初步分为debug版本、release版本以及多字节版本和unicode版本。 一个简单例子就是libpng_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png静态库,是debug版本(.lib前面用一个d来区分),库版本为V 1.3,采用多字节字符集编译。(对应的release版本命名为libpng_vc80_1_3.lib)。如果是unicode版本,名称则是libpng_vc80_1_3_ud.lib和libpng_vc80_1_3_u.lib (多了一个字母u)。

boost电路设计介绍

BOOST电路设计介绍 0 引言 在实际应用中经常会涉及到升压电路的设计,对于较大的功率输出,如70W以上的DC/DC升压电路,由于专用升压芯片内部开关管的限制,难于做到大功率升压变换,而且芯片的价格昂贵,在实际应用时受到很大限制。考虑到Boost升压结构外接开关管选择余地很大,选择合适的控制芯片,便可设计出大功率输出的DC/DC 升压电路。 UC3S42是一种电流型脉宽调制电源芯片,价格低廉,广泛应用于电子信息设备的电源电路设计,常用作隔离回扫式开关电源的控制电路,根据UC3842的功能特点,结合Boost拓扑结构,完全可设计成电流型控制的升压DC/DC电路,且外接元器件少,控制灵活,成本低,输出功率容易做到100W以上,具有其他专用芯片难以实现的功能。 1 UC3842芯片的特点 UC3842工作电压为16~30V,工作电流约15mA。芯片内有一个频率可设置的振荡器;一个能够源出和吸入大电流的图腾式输出结构,特别适用于MoSFET的驱动;一个固定温度补偿的基准电压和高增益误差放大器、电流传感器;具有锁存功能的逻辑电路和能提供逐个脉冲限流控制的PWM比较器,最大占空比可达100%。另外,具有内部保护功能,如滞后式欠压锁定、可控制的输出死区时间等。 由UC3842设计的DC/DC升压电路属于电流型控制,电路中直接用误差信号控制电感峰值电流,然后间接地控制PWM脉冲宽度。这种电流型控制电路的主要特点是: 1)输入电压的变化引起电感电流斜坡的变化,电感电流自动调整而不需要误差放大器输出变化,改善了瞬态电压调整率; 2)电流型控制检测电感电流和开关电流,并在逐个脉冲的基础上同误差放大器的输出比较,控制PWM脉宽,由于电感电流随误差信号的变化而变化,从而更容易设置控制环路,改善了线性调整率; 3)简化了限流电路,在保证电源工作可靠性的同时,电流限制使电感和开关管更有效地工作; 4)电流型控制电路中需要对电感电流的斜坡进行补偿,因为,平均电感电流大小是决定输出大小的因素,在占空比不同的情况下,峰值电感电流的变化不能与平均电感电流变化相对应,特别是占空比,50%的不稳定性,存在难以校正的峰值电流与平均电流的误差,即使占空比<50%,也可能发生高频次谐波振荡,因而需要斜坡补偿,使峰值电感电流与平均电感电流变化相一致,但是,同步不失真的斜坡补偿技术实现上有一定的难度。 2 Boost电路结构及特性分析 2.1 由UC3842作为控制的Boost电路结构 由UC3842控制的Boost拓扑结构及电路分别如图1和图2所示。

相关文档
最新文档