搜索
bottom↓
回复: 2

多媒体timeSetEvent(..)定时器使用问题

[复制链接]

出0入0汤圆

发表于 2016-7-20 14:45:10 | 显示全部楼层 |阅读模式
需求:是在工程中启用一个 多媒体定时器,在定时器中 定时调用串口写函数,发数据。
问题:多媒体定时器的回调函数必须是一个 全局函数,所以没有把他定义成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() 函数。
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-7-20 14:58:20 | 显示全部楼层
MMRESULT timeSetEvent(
   UINT           uDelay,
   UINT           uResolution,
   LPTIMECALLBACK lpTimeProc,
   DWORD_PTR      dwUser,
   UINT           fuEvent
);

可以在 dwUser 传入 CView 类的指针,然后通过这个指针调用成员函数。

出0入0汤圆

 楼主| 发表于 2016-7-20 15:43:18 | 显示全部楼层
mangocity 发表于 2016-7-20 14:58
MMRESULT timeSetEvent(
   UINT           uDelay,
   UINT           uResolution,

恩,我的解决了,不过不是传入指针,而是直接在回调函数中获取View的指针,然后用指针去调用View中的变量!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-16 02:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表