Hi,
I am writing an app which encapsulates a multimedia timer. I implemented
a TimerProc as static member function and a static member variable pThis
as pseudo this variable to access in the static TimerProc function.
timeSetEvent uses TimerProc to set the callback function.
m_pCallback is a function that is passed using the
SetTimerCallbackFunction. It's a function that an object owning the
CMMTimer object can pass to the CMMTimer class. What I want is that
every time the TimerProc function is called, the m_pCallback function is
executed, resulting in the object owning the timer processing the timer.
Header file looks like this:
/***************************************/
typedef void (CALLBACK * MMTIMERCALLBACK) (TRIGGER eTrigger, UINT uID,
int iVal);
CMMTimer
{
public:
BOOL Stop();
BOOL Start(UINT uPeriod);
BOOL Initialize(UINT uResolution);
CMMTimer();
virtual ~CMMTimer();
void SetTimerCallbackFunction(MMTIMERCALLBACK pCallback);
private:
MMTIMERCALLBACK m_pCallback;
UINT m_uResolution;
UINT m_uPeriod;
UINT m_uTimerID;
BOOL m_bInitialized;
static CMMTimer *pThis;
static void CALLBACK TimerProc(UINT wTimerID, UINT msg, DWORD dwUser,
DWORD dw1, DWORD dw2);
}
/***************************************/
Parts of cpp file look like this
/***************************************/
CMMTimer* CMMTimer::pThis = NULL;
void CMMTimer::SetTimerCallbackFunction(MMTIMERCALLBACK pCallback)
{
m_pCallback = pCallback;
}
BOOL CMMTimer::Start(UINT uPeriod)
{
if (!m_bInitialized) return FALSE;
m_uPeriod = uPeriod;
pThis = this;
m_uTimerID =
timeSetEvent(
m_uPeriod,
m_uResolution,
TimerProc,
(DWORD) this,
TIME_PERIODIC );
if(! m_uTimerID)
return FALSE;
else
return TRUE;
}
void CALLBACK TimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD
dw1, DWORD dw2)
{
// I tried this
CMMTimer * pseudoThis = (CMMTimer *) dwUser;
pseudoThis->m_pCallback(<TIMERT, 0, 0); #error#
// and this
pThis->m_pCallback(<TIMERT, 0, 0); #error#
}
I also tried helper functions.
The problem is that this code compiles perfectly, but when I execute the
code, the debugger shows problems at the lines #error#. m_pCallback
cannot be called, the pointer points at memory address 0xcccccccccccccc
I really would like this problem solved.
Thank you
pvdm
}
--
Posted via
http://dbforums.com