| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3549 人关注过本帖
标题:关于多媒体定时器中的回调函数使用
只看楼主 加入收藏
artan_ren
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:0 
关于多媒体定时器中的回调函数使用

本人以前接触VC很少,但现在要做个项目。其中用到多媒体定时器,我用的是全局回调函数,但我发现在全局回调函数中只能调用视图类中的静态成员函数,所以必须将需要处理的程序放在视图类中定义的静态成员函数中,但由由于静态成员函数只能访问静态变量,所以我采取了静态指针的办法,并将静态指针以参数的形式传递给此静态成员函数,想要借此指针访问视图类中的普通变量,可我发现这种方法可以访问视图类中的普通成员函数,可只要添加对普通变量的操作就会出错,不知各位高手可有任何指点?或者可以采取其它办法在静态成员函数中访问类的普通变量?感谢!
主要程序如下:
1、多媒体定时器的设置:
int CAsdfadView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
wTimerRes = 2000; //给时间间隔变量赋值
wAccuracy =1;
TIMECAPS tc; //定时器分辨率的结构

if (timeGetDevCaps(&tc,sizeof(TIMECAPS)) == TIMERR_NOERROR)
{
//分辨率的值不能超出系统的取值范围
wAccuracy=min(max(tc.wPeriodMin,wAccuracy),tc.wPeriodMax);
//调用timeBeginPeriod函数设置定时器的分辨率
timeBeginPeriod(wAccuracy);
}

TimerID = timeSetEvent(wTimerRes,wAccuracy,
(LPTIMECALLBACK)MyTimerProc,
(DWORD)this,TIME_PERIODIC);

return 0;
}

2、全局回调函数、全局静态指针及视图类中的静态成员函数的声明:
void CALLBACK MyTimerProc(UINT wTimerID, UINT nMsg, DWORD dwUser, DWORD dw1, DWORD dw2);

static CAsdfadView* pthis; // 全局函数和指针均是在类之外声明的

static void CAsdfadView::MyTime(CAsdfadView* mythis);

3、全局回调函数及静态成员函数的定义:
void CALLBACK MyTimerProc(UINT wTimerID, UINT nMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
CAsdfadView::MyTime(pthis);
}

void CAsdfadView::MyTime(CAsdfadView* mythis) //注意:static成员函数只能访问类的static成员!
{
AfxMessageBox("Time",MB_ICONINFORMATION);
//在这里可以采用参数形式传递的静态指针来访问普通成员函数,
//但只要添加对普通变量的处理就会出错!?
}

搜索更多相关主题的帖子: 多媒体 回调 定时器 函数 
2006-05-01 10:54
快速回复:关于多媒体定时器中的回调函数使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026091 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved