[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