mciSendString 占用句柄

nowordwind 2011-05-12 10:45:15
我想用mciSendString来播放音乐,很简单的几句话,发现调用一次后,里面就有句柄未释放,如果循环调用,情况会更糟,不知道是否我哪里没有写正确,现在帖上来,希望大家帮我分析下.谢谢.


CString s, s2;
s2 = _T("D:\\aa.mp3");


while (1)
{
s.Format(_T("open \"%s\" type MPEGVideo alias OpenFile"), s2);
MCIERROR me=mciSendString(s, NULL, 0, 0);
mciSendString(_T("Play OpenFile wait"), NULL, 0, 0);
mciSendString(_T("close OpenFile"), NULL, 0, 0);
}
...全文
88 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nowordwind 2011-05-12
  • 打赏
  • 举报
回复

CString strPath("D:\\AA.mp3");
MCI_OPEN_PARMS mciOP;
mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = strPath; // MP3文件所在路径
DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &mciOP);
MCIDEVICEID wID;
if (dwReturn == 0)
{
wID = mciOP.wDeviceID;
}
else
{
wID = NULL;
}

MCI_PLAY_PARMS mciPP;
DWORD dw = mciSendCommand(wID, MCI_PLAY, MCI_WAIT, (DWORD)(LPVOID)&mciPP);

mciSendCommand(wID, MCI_CLOSE, NULL, NULL);


改成一楼的方法,只是改了API函数的不同后,一样的有句柄的增加,继续顶.
nowordwind 2011-05-12
  • 打赏
  • 举报
回复
这是我的一个测试程序.加入断点后,来看是不是有资源泄露,我的重点,是不要有句柄的增加,别外你的方法我试试,只要不引起内存泄露即可.
黑泡泡选手 2011-05-12
  • 打赏
  • 举报
回复
这不是被你搞死了么?

CString strPath("");
MCI_OPEN_PARAMS mciOP;
mciOP.lpstrDeviceType = NULL;
mciOP.lpstrElementName = strPath; // MP3文件所在路径
DWORD dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE, (DWORD)(LPVOID) &mciOP);
MCIDEVICEID wID;
if (dwReturn == 0)
{
wID = mciOP.wDeviceID;
}
else
{
wID = NULL;
}

MCI_PLAY_PARMS mciPP;
DWORD dw = mciSendCommand(wID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID)&mciPP);

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧