C++並發編程框架Theron(3)——Theron入門


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/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com