diff options
author | Juergen Funk <juergen.funk_ml@cib.de> | 2015-06-03 09:23:44 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2015-06-12 15:19:20 +0000 |
commit | 1289d3c42af66990a2c8e5a7a38e51b6cd51c7eb (patch) | |
tree | 5891add77480cc9b19edb4ccabe7061446a5c9cc /include/vcl/scheduler.hxx | |
parent | beb8e2830dc9e1c771e196fcaf08cdfd6bf3dde3 (diff) |
std::list for Scheduler
Re-factor the scheduler to use std::list
Because
- ImplSchedulerData
- remove: mbInScheduler, mnUpdateTime, mnUpdateStack
that is scheduler stuff
- this struct is only a container for the scheduler-list
- UpdateMinPeriod
- the scheduler is the pure-virtual-class then
the idle-class must override this method
- ImplDeInitScheduler(bool All=true)
- this patch 2e29a518b04250b5f9cc9d0d77da3df076834d60 remove
all scheduler tasks and the scheduler, but after that,
the scheduler is using, then crash.
With this fix, only delete the scheduler-list, but not the
scheduler
The next steps
- split the scheduler from the scheduler-list-handling
the scheduler-list-handling need a static class
- remove the scheduler from the timer-handling staff
Change-Id: I8d4d4f27b2bc9684a48c2afafd0b3edd0716c71d
Reviewed-on: https://gerrit.libreoffice.org/16148
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'include/vcl/scheduler.hxx')
-rw-r--r-- | include/vcl/scheduler.hxx | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/include/vcl/scheduler.hxx b/include/vcl/scheduler.hxx index 6c4e2116b589..6b27e05530e8 100644 --- a/include/vcl/scheduler.hxx +++ b/include/vcl/scheduler.hxx @@ -21,23 +21,18 @@ #define INCLUDED_VCL_SCHEDULER_HXX #include <vcl/dllapi.h> +#include <list> + -struct ImplSVData; class Scheduler; struct ImplSchedulerData { - ImplSchedulerData* mpNext; // Pointer to the next element in list - Scheduler* mpScheduler; // Pointer to VCL Scheduler instance - bool mbDelete; // Destroy this scheduler? - bool mbInScheduler; // Scheduler currently processed? - sal_uInt64 mnUpdateTime; // Last Update Time - sal_uInt32 mnUpdateStack; // Update Stack - - void Invoke(); - - static ImplSchedulerData *GetMostImportantTask( bool bTimer ); + bool mbDelete; // Destroy this scheduler? + Scheduler* mpScheduler; // Pointer to VCL Scheduler instance }; +#define MAX_TIMER_PERIOD SAL_MAX_UINT64 + enum class SchedulerPriority { HIGHEST = 0, HIGH = 1, @@ -56,6 +51,7 @@ protected: const sal_Char *mpDebugName; /// Useful for debugging SchedulerPriority mePriority; /// Scheduler priority bool mbActive; /// Currently in the scheduler + sal_uInt64 mnUpdateTime; /// Last Update Time friend struct ImplSchedulerData; virtual void SetDeletionFlags(); @@ -82,15 +78,28 @@ public: bool IsActive() const { return mbActive; } void SetInActive() { mbActive = false; } - Scheduler& operator=( const Scheduler& rScheduler ); - static void ImplDeInitScheduler(); + Scheduler& operator=( const Scheduler& rScheduler ); + static void ImplDeInitScheduler(bool bAll=true); + static void ImplInitScheduler(); - // Process one pending Timer with highhest priority + // Process one pending Timer with highest priority static void CallbackTaskScheduling( bool ignore ); - /// Process one pending task ahead of time with highhest priority. + /// Process one pending task ahead of time with highest priority. static void ProcessTaskScheduling( bool bTimer ); + +private: + bool mbInScheduler; // Scheduler currently processed? + sal_uInt32 mnUpdateStack; // Update Stack + + bool ImplHandleTaskScheduling(sal_uInt64& nMinPeriod, sal_uInt64 nTime); + void ImplInvoke(sal_uInt64 nTime); + static Scheduler* ImplGetHighestPrioTask( bool bTimer ); + bool ImplIsScheduleReady(sal_uInt32 nUpdateStack); + void ImplDispose(); }; +typedef ::std::list< ImplSchedulerData* > ImplScheduler_t; + #endif // INCLUDED_VCL_SCHEDULER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |