summaryrefslogtreecommitdiff
path: root/include/vcl/scheduler.hxx
diff options
context:
space:
mode:
authorJuergen Funk <juergen.funk_ml@cib.de>2015-06-03 09:23:44 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2015-06-12 15:19:20 +0000
commit1289d3c42af66990a2c8e5a7a38e51b6cd51c7eb (patch)
tree5891add77480cc9b19edb4ccabe7061446a5c9cc /include/vcl/scheduler.hxx
parentbeb8e2830dc9e1c771e196fcaf08cdfd6bf3dde3 (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.hxx39
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: */