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
SetTimerCallbac kFunction. 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 SetTimerCallbac kFunction(MMTIM ERCALLBACK 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::SetTi merCallbackFunc tion(MMTIMERCAL LBACK pCallback)
{
m_pCallback = pCallback;
}
BOOL CMMTimer::Start (UINT uPeriod)
{
if (!m_bInitialize d) 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(<T IMERT, 0, 0); #error#
// and this
pThis->m_pCallback(<T IMERT, 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 0xccccccccccccc c
I really would like this problem solved.
Thank you
pvdm
}
--
Posted via
http://dbforums.com