平台:win7+vc6.0
以下代码为应用vc6.0多线程读取音频模板:
#include <iostream.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>
#include "windows.h"
#include "mmsystem.h"
DWORD _stdcall ThreadProc(LPVOID lpParameter)//线程执行函数
{
//音频输出参数
// TODO: Add your command handler code here
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS PlayParms;
mciOpenParms.dwCallback=0;
mciOpenParms.wDeviceID=0;
mciOpenParms.lpstrDeviceType="waveaudio";
mciOpenParms.lpstrAlias=" ";
PlayParms.dwCallback=0;
PlayParms.dwTo=0;
PlayParms.dwFrom=0;
int si=100;
while(si>0)
{
if(si%5==1)//符合条件报出音频
{
mciOpenParms.lpstrElementName="D:\\文件夹\\28.wav";
}
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms);//打开音频设备;
mciSendCommand(mciOpenParms.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)(LPVOID)&PlayParms);//播放WAVE声音文件;
mciSendCommand(mciOpenParms.wDeviceID,MCI_CLOSE,NULL,NULL);//关闭音频设备;
printf("子线程输出数字:%d\n",si--);
Sleep(1000);
}
return 0;
}
int main(int argc, char* argv[])
{
int mi=0;
CreateThread(NULL,0,ThreadProc,NULL,0,NULL);//创建一个线程,去执行ThreadProc函数
while(mi<100)
{
printf("主线程输出数字:%d\n",mi++);
Sleep(1000);
}
return 0;
}
注:其实头文件用不了那么多,为了保险我就都加上了。
另外需要嘱咐的是,在VS2010的平台上,本代码会报错,原因是缺少头文件,以及读取字符串的方式。
其中头文件需要加入#include <TCHAR.h>,读取字符串为_T("waveaudio");
两种平台上,代码均通过编译,运行成功。