多媒体timeSetEvent(..)定时器使用问题
需求:是在工程中启用一个 多媒体定时器,在定时器中 定时调用串口写函数,发数据。问题:多媒体定时器的回调函数必须是一个 全局函数,所以没有把他定义成CxxxxView的成员函数,直接在CxxxxView类外面定义和实现回调函数。如此一来,回调函数就不能调用CxxxxView的成员了。
解决方法一:回调函数发 消息 给CxxxxView,用消息响应去实现,但是发现用消息后,消息容易被阻塞,使timeSetEvent()的准确性打折扣。
所以希望直接在回调函数中操作串口,达到定时串口发送的目的。
附代码段:
新建一个VC++工程,工程文件CxxxxView.h中定义了一个类成员m_SerialPort。
class CxxxxView : public CFormView
{
...
CSerialPort m_SerialPort; //定义一个串口
...
};
在CxxxxView.cpp用timeSetEvent(..)设置回调函数为void MilliSecondTimerEnd(UINT uTimerID, UINT *lpuPeriod), 这个函数不是class CxxxxView 的成员函数。
void MilliSecondTimerEnd(UINT uTimerID, UINT *lpuPeriod)
{
//这里不能 调用m_SerialPort.writechar() 函数。
} MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD_PTR dwUser,
UINT fuEvent
);
可以在 dwUser 传入 CView 类的指针,然后通过这个指针调用成员函数。
mangocity 发表于 2016-7-20 14:58
MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
恩,我的解决了,不过不是传入指针,而是直接在回调函数中获取View的指针,然后用指针去调用View中的变量!
页:
[1]