Index: src/ch/task.h =================================================================== diff -u -N -r678a716a4ed83d5790a407ce60dfcf7d8ca703fa -rf703b71b8c856e2538283555e9fdbc84918677c3 --- src/ch/task.h (.../task.h) (revision 678a716a4ed83d5790a407ce60dfcf7d8ca703fa) +++ src/ch/task.h (.../task.h) (revision f703b71b8c856e2538283555e9fdbc84918677c3) @@ -232,7 +232,7 @@ class CTask { public: - CTask(chcore::IFeedbackHandler* piFeedbackHandler, const TASK_CREATE_DATA *pCreateData); + CTask(chcore::IFeedbackHandler* piFeedbackHandler, const TASK_CREATE_DATA *pCreateData, size_t stSessionUniqueID); ~CTask(); int OnBeginTask(); @@ -363,6 +363,8 @@ void SetContinueFlag(bool bFlag=true); bool GetContinueFlag(); + size_t GetSessionUniqueID() const { return m_stSessionUniqueID; } + protected: static UINT ThrdProc(LPVOID pParam); static void CheckForWaitState(CTask* pTask); @@ -435,9 +437,13 @@ tstring_t m_strTaskBasePath; // base path at which the files will be stored bool m_bSaved; // has the state been saved ('til next modification) + size_t m_stSessionUniqueID; + CCriticalSection* m_pcs; // protects *m_pnTasksProcessed & *m_pnTasksAll from external array }; +typedef boost::shared_ptr CTaskPtr; + /////////////////////////////////////////////////////////////////////////// // CProcessingException @@ -460,28 +466,29 @@ /////////////////////////////////////////////////////////////////////////// // CTaskArray -class CTaskArray : public CArray +class CTaskArray// : public CArray { public: CTaskArray(); ~CTaskArray(); void Create(chcore::IFeedbackHandlerFactory* piFeedbackHandlerFactory); - CTask* CreateTask(); + CTaskPtr CreateTask(); - size_t GetSize( ); - size_t GetUpperBound( ); - void SetSize(size_t stNewSize, int nGrowBy = -1); + size_t GetSize(); - CTask* GetAt(size_t stIndex); - size_t Add(CTask* newElement); + CTaskPtr GetAt(size_t stIndex); + CTaskPtr GetTaskBySessionUniqueID(size_t stSessionUniqueID); + size_t Add(const CTaskPtr& spNewTask); void RemoveAt(size_t stIndex, size_t stCount = 1); void RemoveAll(); void RemoveAllFinished(); - void RemoveFinished(CTask** pSelTask); + void RemoveFinished(const CTaskPtr& spSelTask); + void StopAllTasks(); + void SaveData(); void SaveProgress(); void LoadDataProgress(); @@ -515,6 +522,10 @@ CCriticalSection m_cs; TASK_CREATE_DATA m_tcd; +private: + std::vector m_vTasks; + size_t m_stNextSessionUniqueID; + protected: chcore::IFeedbackHandlerFactory* m_piFeedbackFactory; };