C++併發程式設計框架Theron(3)——Theron入門

無鞋童鞋發表於2017-07-15

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/

相關文章