1 前言
前面两篇博文主要介绍了Theron框架相关的理论知识,包含Theron的任务、优势、根基actor模型以及其五要素等内容。这些理论知识可能看起来枯燥乏味又晦涩难懂,不过没关系,从本篇博文开始,我们将真正走进Theron的实践与应用的大门,一切理论自然只有经得起实践的考验才能称得上完美与优秀。在这第三篇博文中,我会相继介绍如何下载Theron源码包,如何搭建Theron工程以及如何建立你第一个基于Theron框架的应用。所以希望各位不要妄图只通过阅读网上的资料文献来学好Theron框架,只有你耐心地走进代码世界通过自己调试才会娴熟掌握每个知识点。
2 下载Theron
我们可以在这里下载最新版本的Theron框架程序,但是下载需要填写自己的邮箱信息,然后从邮箱链接入口下载,所以就不要随便填写一个邮箱了,不然你是获取不到Theron源码包的。你收到的邮箱应该下面一样,点击链接click here就可以下载啦。
接着我们解压下载下来的zip压缩文件到本地磁盘——解压的文件夹名称应该是Theron-×××样式,×××是版本号,目前最先的版本是Theron-6.00.02。根目录包含一个makefile文件和一个名称为Theron.sln的Visual Studio解决方案,以及还有一连串的放置不同功能的子文件夹。至此,恭喜你完成了第一步,下面我们来看如何搭建Theron框架吧。
3 生成Theron
生成(Build)Theron解决方案才可以将其链接到你自己的应用程序中,其中整个解决方案下还包括tests,samples和benchmarks三个实践部分,可以分别编译和执行。而Theron怎样被构建的细节取决于你平台和线程库的选择。
Theron库可以在多个不同平台上使用,并且无需改动主要的代码部门。主流支持的平台是Linux系统下的GCC和Windows下的Visual Studio。下面我们也主要围绕这两个平台如何搭建Theron框架。
3.1 GCC上生成Theron
如果你的编译器是GCC(例如在Linux平台上),你可以直接从根文件下写好的makefile文件开始入手编译。
当然,如果你已经建立了自己的工程系统,你也可以参考那个makefile文件编写怎样将Theron库融入你的工程中。Theron构建有一系列不同的选择,包括debug和release生成方式,还有不同的线程库的选择,动态还是静态链接等,下面我们就来主要看看我们make时候有哪些可选择方案。
3.1.1 目标选择
makefile支持下面的目标选择:
// 执行其他所有除了编译
make all
//仅编译Theron库
make library
//仅生成教程可执行文件(一些实例)
make tutorial
//仅生成测试的可执行文件
make tests
//仅生成基准的可执行文件
make benchmarks
//删除之前生成的Theron库和各种目标文件
make clean
3.1.2 Debug和release选择
makefile支持选择debug调试和release发行两种方式。
make mode=[debug|release]
当指定mode=relase,-O3 -fno-stric-aliasing -DNDEBUG编译标志被设置;而当指定mode=debug,-g -D_DEBUG标志被设置。默认情况下是mode=debug。
3.1.3 支持的线程库选择
makefile还支持选择不同的线程库,这块我需要详细的说明一下,Theron虽然是C++多线程开发框架,但是它并不是一个线程库,而是借助已知那些线程库上的一个Actor模型库。所以这个框架的目标可以说是,将复杂又难入手的线程处理细节隐去,而给出更简单和更直接的基于消息传递的API。
所以说Theron框架的实现还是借助传统C++多线程框架搭建,即它需要一个线程库来支持其内部的线程管理。此外Theron框架比较好的地方是,几个常用的线程库你可以在任意环境下选择使用,只要当前平台环境支持该线程库。默认情况下,Theron是使用Windows threads(Windows环境)和POSIX线程(即pthreads,Linux环境)构建的。
除了这两个平台自带环境库以外,,Theron还支持两个专业的thread“库”:boost::thread(一个第三方Boost库的组成)和std::thread(C++11新加入的一个标准库组成),选择的多样性自然可以让你调试自己的应用更加的得心应手。而如果你准备在一个新的换机平台使用Theron库,但是这四个线程库目前都还不支持的话,你也不要放弃应用。你也可以自己尝试修改源码,线程的包装对象位于Include/Theron/Detail/Threading/子目录中,当然这个过程可能相对而言复杂了许多。
好了,我们还是回过头来看看如何在make时候随心切换其他线程库,如下:
//选择支持或者禁止Windows threads
make windows=[off|on]
//选择支持或者禁止Boost threads
make boost=[off|on]
//选择支持或者禁止C++ std::thread
make c++11=[off|on]
//选择支持或者禁止POSIX threads
make posix=[off|on]
3.1.4 静态和动态链接的选择
Makefile支持代码生成在静态和动态之间切换,默认是shared=off,如果选择shared=on就可以支持将Theron库以动态库形式链接进一个构建系统。
make shared=[on|off]
3.1.5 命令行示例
下面命令行就是以使用Boost线程库以及选择release模式重建一个Theron教程可执行文件。
make clean tutorial mode=release boost=on
3.2 Visual Studio上建立Theron
相比较Linux下,Windows下编译Theron库就更加直观了。Theron代码目录下有一个.sln解决方案文件,你直接使用Visual Studio开发平台打开即可,其中重要的.cpp文件放置在/Source目录下,而.h文件放置在/Include目录下。然后编译整个解决方案直接使用Build菜单下的Build Solution即可。
Windows下你还任意可以选择Win32和x64平台,对应Debug或者Release方式配置编译。此外和Linux平台下一样可以切换支持的线程库,Windows下线程库,你可以在Include/Theron/Define.h头文件中预定义方式来决定。相关的线程库的定义如下:
THERON_BOOST: 控制是否使用Boost线程库;如果THERON_BOOST被定义成1,则Boost可以使用;
THERON_CPP11:控制时候使用C++11线程库;如果THERON_CPP11设为1,则C++11线程库就可以被使用;
THERON_POSIX:控制是否使用POSIX线程库;如果THERON_POSIX设为1,则POSIX线程库可以被使用;
THERON_WINDOWS:控制是否使用Windows线程库,默认在Windows下是使用该线程库,所以直接使用该线程库就无需其他操作了。
库中THERON_WINDOWS实现默认的代码如下:
当然上面直接在头文件中修改是不太建议的,**我们还可以在构建工程时候以全局的方式覆盖定义。**GCC和Visual Studio都有对应的设置预定义的方式,比如GCC命令行使用-D(当然之前介绍的makefile命令行选择也是支持的),而Visual Studio在工程预处理器中设置。而如果它们还尚未被定义,这些仅在Defines.h中写入。
4 测试
编译生成可执行文件完成后,所有二进制可执行文件都生成在/Bin子目录下面(初始时候是空目录)。一开始我就说过,整个Theron代码库不仅包含基本的框架代码,还包含很多测试文件,如果你在Linux下直接运行这些二进制可执行测试文件即可;而Visual Studio下需要先将某一个工程设为启动项目,然后直接调试运行就可以了。当然,你要保证之前生成时候没有任何出错!
5 将Theron融入你自己的应用
一旦Theron库已经生成完毕,你也可以使用它们开始完成你自己的应用了。当然,最简单的方法就是将你自己的工程包含在Theron库makefile(Linux环境)和solution(Windows环境)中然后拷贝一个现有的样例作为参照,例如Visual Studio下将你自己的工程作为启动项目直接运行即可。
但是我想更多人还是希望将Theron头文件和库文件拉到你自己工程下完成分离编译,这里主要是靠将Theron的include路径和library路径加到你自己的工程中去来实现的。头文件都在Include子目录下,将这个路径加入你工程的include路径,然后你就可以在程序中包含Theron头文件像下面一样:
#include <Theron/Theron.h>
而Theron框架脚本生成Theron库是放在Lib目录下(初始时候是空目录)。release库由makefile生成的文件是libtheron.a,而由Visual Studion生成的是Theron.lib。debug库对应的则分别是libtherond.a和Therond.lib(库名称多了一个’d’)。
最后,你可以将下面一个简单的例子复制到你的工程代码文件中去,然后就可以编译测试啦:
#include <Theron/Theron.h>
class Actor : public Theron::Actor
{
public:
explicit Actor(Theron::Framework &framework) : Theron::Actor(framework)
{
RegisterHandler(this, &Actor::Handler);
}
private:
void Handler(const int &message, const Theron::Address from)
{
Send(message, from);
}
};
int main()
{
Theron::Receiver receiver;
Theron::Framework framework;
Actor actor(framework);
framework.Send(int(0), receiver.GetAddress(), actor.GetAddress());
receiver.Wait();
}
6 小结
这篇博文主要介绍了Theron框架如何下载以及如何生成解决方案,另外还指导了如何构建你第一个融合Theron框架的应用。这些都是工程实践的基础,牛刀小试,后面我们再慢慢的打开Theron框架应用的大门!
以上是个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!
转载请注明出处:http://blog.csdn.net/FX677588/article/details/74359823
参考文献:
Theron框架官网http://www.theron-library.com/