程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 如何使用ACE_Task管理線程

如何使用ACE_Task管理線程

編輯:關於C++

為什麼要使用ACE_Task來管理線程

從C#轉到C++後,感覺到C++比C#最難的地方,就是在系統編程時,C#中有對應的類庫,我接觸到一個類後,就可以通過這個類,知道很多相關的功能。而在C++中,必須使用Windows API,但是Windows API的缺點反而是不系統。比如,想要創建一個線程時,C#中可以通過新建一個Thread類,我得到這個類後,就可以通過幫助或者MSDN了解到這個類中有哪些方法,如何管理線程等。但是C++中,創建一個線程,需要調用CreateThread,但因為它是一個API,所以很難快速的了解到與線程管理相關的API,至少對我來說,這是一個難點。

C#的優勢是以類的方式去管理線程,而C++ 調用API更像是在單打獨斗,顯得特別特別散亂。

那麼在C++中,我們能不能以類的方式去管理線程呢。針對這個問題,ACE_Task便浮出了水面。

ACE_Task使用方法

ACE_Task對常用線程處理進行了OO包裝,通過ACE_Task,能對線程進行更好的操作。

根據ACE_Task的父類ACE_Task_Base中的注釋,可以總結出以下幾點:

想要使用ACE_Task,就要從ACE_Task派生一個子類,然後實現比較重要的幾個虛方法。

實現服務初始化和終止方法:open()方法應該包含所有專屬於任務的初始化代碼。其中可能包括諸如連接控制塊、鎖和內存這樣的資源。close() 方法是相應的終止方法。

調用啟用(Activation )方法:在主動對象實例化後,你必須通過調用activate()啟用它。要在主動對象中創建的線程的數目,以及其他一些參數,被傳遞給activate()方法。activate()方法會使svc()方法成為所有它生成的線程的啟動點。

實現服務專有的處理方法:如上面所提到的,在主動對象被啟用後,各個新線程在svc()方法中啟動。應用開發者必須在子類中定義此方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved