程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 我的POCO C++庫學習 -- 任務

我的POCO C++庫學習 -- 任務

編輯:C++入門知識

我的POCO C++庫學習 -- 任務   1. 任務的定義         任務雖然在Poco::Foundation庫的目錄結構中被單獨劃出,其實也可以被看成線程的應用,放在線程章節。首先來看一下Poco中對於任務的描述: task主要應用在GUI和Seerver程序中,用於追蹤後台線程的進度。 應用Poco任務時,需要類Poco::Task和類Poco::TaskManager配合使用。其中類Poco::Task繼承自Poco::Runnable,它提供了接口可以便利的報告線程進度。Poco::TaskManager則對Poco::Task進行管理。 為了完成取消和上報線程進度的工作:                   a. 使用者必須從Poco::Task創建一個子類並重寫runTask()函數                   b. 為了完成進度上報的功能,在子類的runTask()函數中,必須周期的調用setProgress()函數去上報信息                   c. 為了能夠在任務運行時終止任務,必須在子類的runTask()函數中,周期性的調用isCancelled()或者sleep()函數,去檢查是否有任務停止請求                   d. 如果isCancelled()或者sleep()返回真,runTask()返回。 Poco::TaskManager通過使用Poco::NotificationCenter 去通知所有需要接受任務消息的對象         從上面描述可以看出,Poco中Task的功能就是能夠自動匯報線程運行進度。   2. 任務用例         Task的應用非常簡單,下面是其一個使用例子: [cpp]   #include "Poco/Task.h"   #include "Poco/TaskManager.h"   #include "Poco/TaskNotification.h"   #include "Poco/Observer.h"      using Poco::Observer;   class SampleTask: public Poco::Task   {   public:       SampleTask(const std::string& name): Task(name)       {}             void runTask()       {           for (int i = 0; i < 100; ++i)           {               setProgress(float(i)/100); // report progress               if (sleep(1000))                   break;           }       }   };      class ProgressHandler   {   public:       void onProgress(Poco::TaskProgressNotification* pNf)       {           std::cout << pNf->task()->name()               << " progress: " << pNf->progress() << std::endl;           pNf->release();       }       void onFinished(Poco::TaskFinishedNotification* pNf)       {           std::cout << pNf->task()->name() << " finished." << std::endl;           pNf->release();       }   };  www.2cto.com    int main(int argc, char** argv)   {       Poco::TaskManager tm;       ProgressHandler pm;       tm.addObserver(           Observer<ProgressHandler, Poco::TaskProgressNotification>           (pm, &ProgressHandler::onProgress)           );       tm.addObserver(           Observer<ProgressHandler, Poco::TaskFinishedNotification>           (pm, &ProgressHandler::onFinished)           );       tm.start(new SampleTask("Task 1")); // tm takes ownership       tm.start(new SampleTask("Task 2"));       tm.joinAll();       return 0;   }     3. Task類圖         最後給出Poco中Task的類圖。         在類圖中,我們可以看到Task類繼承自RefCountedObject,這主要是為了Task類的管理。TaskManger對Task實現了自動的垃圾收集。

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