myhand=::CreateThread( NULL, 0, midline, (void*) iterations, 0, NULL);
//创建线程并注册midline为线程
DWORD WINAPI myline(LPVOID param)//自定义压缩编码存贮线程
{
while(1) //线程无限循环开始
{
… //定量的音频数据压缩过程代码
… //定量的音频数据压缩完成,调用存盘程序
::SuspendThread(myhand);//线程挂起,
}
return 0;
}
在主线程,用下面函数启动编码线程函数:
::ResumeThread(myhand)
调度过程: 在C主程序中设两个内存缓冲区轮换存储多路数字音频原始数据,采样多路数据轮换存储到一个缓冲区, 缓冲区满, 启动压缩编码线程函数, 压缩编码完成,调用存盘程序,挂起压缩线程(不运行), 等待下一个次缓冲区满, 主线程重新启动编码线程函数, 不断循环,实现音频采样处理与压缩互不影响。
3.2 消息发送
DLL对音频的实时处理完成消息 ,如数据分析消息、数据压缩完成消息,要及时通知VB主程序, 接收处理结果,复位以便进行后继处理。这里巧妙地调用向文本窗口传送字符串的API函数解决了这个问题:
(1)在VB主程序界面放一文本框TEXTA,取文本框句柄TEXTA.hand
(2)主程序开始,向WINIO.DLL 传送TEXTA.hand
(3)在WINIO.DLL用API函数,向TEXTA传送变化的字符串X,
SetWindowText( textA.hwnd,x)
(4)在主程序,用TEXTA变化处理函数进行响应,
例:
Private Sub Text3_Change()
… ‘取数据程序
END SUB
|