[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-client-cvs
Subject:    [Client-cvs] common/system hxsched.cpp,1.26.2.8,1.26.2.8.6.1
From:       xzhao () helixcommunity ! org
Date:       2011-05-25 3:12:23
Message-ID: 201105250312.p4P3Ca3w009534 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/client/common/system
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv25090

Modified Files:
      Tag: hxclient_3_6_1_atlas
	hxsched.cpp 
Log Message:
So change this logic to "Kick() return as its interval parameter the delta to the \
most recent event in all scheduler queue. And the Wait should be timed out based on \
that value", until it is wake up. Once it is signaled, re-check time delta to most \
recent event and adjust waiting time and then wait(Actually this is what we have \
now).


Index: hxsched.cpp
===================================================================
RCS file: /cvsroot/client/common/system/hxsched.cpp,v
retrieving revision 1.26.2.8
retrieving revision 1.26.2.8.6.1
diff -u -d -r1.26.2.8 -r1.26.2.8.6.1
--- hxsched.cpp	5 May 2009 16:32:47 -0000	1.26.2.8
+++ hxsched.cpp	25 May 2011 03:12:20 -0000	1.26.2.8.6.1
@@ -130,6 +130,7 @@
     ,m_ulMinimumGranularity(MINIMUM_GRANULARITY)
     ,m_pWaitEvent(NULL)
     ,m_bWaitPending(FALSE)
+    ,m_pExternalWaitEvent(NULL)
     ,m_bWaitedEventFired(FALSE)
     ,m_ulThreadID(0)
 {
@@ -192,6 +193,7 @@
 #endif 
     HX_DELETE(m_pTimeline);
     HX_RELEASE(m_pWaitEvent);
+    HX_RELEASE(m_pExternalWaitEvent);
     HX_RELEASE(m_pCoreMutex);
 }
 
@@ -221,6 +223,7 @@
         {
             { GET_IIDHANDLE(IID_IHXScheduler), (IHXScheduler*)this },
             { GET_IIDHANDLE(IID_IHXScheduler2), (IHXScheduler2*)this },
+            { GET_IIDHANDLE(IID_IHXScheduler3), (IHXScheduler3*)this },
             { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXScheduler*)this },
         };
     
@@ -277,6 +280,7 @@
 	{
 	    hCallback = (CallbackHandle) m_pInterruptTimeScheduler->
     						    enter(tVal, pCallback);
+            m_ulInterruptNextDueTime = \
_GetNextDueTimeInMs(m_pInterruptTimeScheduler);  }
 	else if ((HXR_OK == pCallback->QueryInterface(IID_IHXInterruptOnly, 
 					             (void**) &pInterruptOnlyCB)) &&
@@ -284,10 +288,12 @@
 	{
 	    hCallback = (CallbackHandle) m_pInterruptTimeOnlyScheduler->
     						    enter(tVal, pCallback);
+            m_ulInterruptOnlyNextDueTime = \
_GetNextDueTimeInMs(m_pInterruptTimeOnlyScheduler);  }
 	else
 	{
 	    hCallback = (CallbackHandle) m_pScheduler->enter(tVal, pCallback);
+            m_ulSystemNextDueTime = _GetNextDueTimeInMs(m_pScheduler);
 	}
 
 	HX_RELEASE(pInterruptSafeCB);
@@ -299,6 +305,11 @@
 	    // been made and wait should be re-evaluated.
 	    m_pWaitEvent->SignalEvent();
 	}
+
+        if (m_pExternalWaitEvent)
+        {
+            m_pExternalWaitEvent->SignalEvent();
+        }
     }
 
     return hCallback;
@@ -428,6 +439,11 @@
 		m_bWaitedEventFired = TRUE;
 		m_pWaitEvent->SignalEvent();
 	    }
+
+            if (m_pExternalWaitEvent)
+            {
+                m_pExternalWaitEvent->SignalEvent();
+            }
 	}
 
 	int immCount = 0;
@@ -595,6 +611,22 @@
 	    m_pInterruptTimeOnlyScheduler->empty());
 }
 
+STDMETHODIMP
+HXScheduler::SetWaitEvent(IHXEvent* pEvent)
+{
+    if (!pEvent)
+    {
+        return HXR_POINTER;
+    }
+
+    if (!m_pExternalWaitEvent)
+    {
+        m_pExternalWaitEvent = pEvent;
+        m_pExternalWaitEvent->AddRef();
+    }
+    return HXR_OK;
+}
+
 STDMETHODIMP_(HXBOOL)
 HXScheduler::GetNextEventDueTimeDiff(ULONG32 &ulEarliestDueTimeDiff)
 {
@@ -719,7 +751,7 @@
 	m_bWaitPending = TRUE;
 	do
 	{
-	    GetNextEventDueTimeDiff(ulTimeToNextEvent);
+            GetNextEventDueTimeDiff(ulTimeToNextEvent);
 	    if (ulTimeout > ulTimeToNextEvent)
 	    {
 		ulTimeout = ulTimeToNextEvent;
@@ -1102,6 +1134,21 @@
     return m_ulCurrentGranularity;
 }
 
+STDMETHODIMP_(UINT32)
+HXScheduler::GetCBDueTimeInMs()
+{
+    UINT32 ret = 0;
+    if (!m_pScheduler->empty())
+    {
+        ret = _GetNextDueTimeInMs(m_pScheduler);
+    }
+    else
+    {
+        ret = ALLFS;
+    }
+    return ret;
+}
+
 HXSchedulerTimer::HXSchedulerTimer()
     : m_ulLastCallTime(0),
       m_ulTargetTime(0),


_______________________________________________
Client-cvs mailing list
Client-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/client-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic