DirectSound 与 多线程问题
来源:互联网 发布:淘宝怎么关联营销 编辑:程序博客网 时间:2024/05/29 03:14
这两天开始研究DirectSound录音,在网上找了一个例程感觉还不错。结构清晰,严谨,数据结构也用的不错。
于是照着做了一下,OK 果然是不错的东西。可以录音了,但是关闭窗体的时候发现程序还没有退出。郁闷,第一时间发觉应该是线程还没有结束。查了一下程序果然没有结束线程的地方。如下:
while (true)
{
// 等待缓冲区的通知消息
mNotificationEvent.WaitOne(Timeout.Infinite, true);
// 录制数据
RecordCapturedData();
}
关闭了窗口后,下个中断并没有进入whlie循环体。如是觉得线程已经退出(后面的方法发现根本没有退出),调试---》窗口 ,发现没有如何线程存在(不敢肯定是不Microsoft的bug)。不管了,将true换成以下形式:
while (!_shouldStop)
{
// 等待缓冲区的通知消息
mNotificationEvent.WaitOne(Timeout.Infinite, true);
// 录制数据
RecordCapturedData();
}
MessageBox.Show("线程退出");
控制退出结果不行,MessageBox 没有执行。再次郁闷,找了很多其他办法都不行。后来强制终止线程,mNotifyThread.abort();成功,窃喜。多试几次果然成功。但上面的方式为什么不行呢,应该能够退出循环结束线程阿?再次郁闷,突思奇想,会不会线程执行太频繁了。如是变成以下形式:
while (!_shouldStop)
{
// 等待缓冲区的通知消息
mNotificationEvent.WaitOne(Timeout.Infinite, true);
// 录制数据
RecordCapturedData();
Thread.Sleep(50); //防止线程占用过多的CPU时间,必须
}
MessageBox.Show("线程退出");
最后,总结。线程的每次轮询时间不能过如频繁。不知道对不对,问题是解决了。有什么不对的地方还望各位
大小虾指点。共同学习
- DirectSound 与 多线程问题
- DirectSound问题
- DirectSound问题
- DirectSound 播放声音杂音问题.
- DirectSound 播放声音杂音问题.
- DirectSound
- DirectSound
- DirectSound
- directsound
- DirectSound
- DirectSound
- DirectSound
- DirectSound
- DirectSound
- DirectSound 与Waveout的区别
- Directsound 与 Waveout 有何不同
- 多线程与多进程问题
- 多线程处理与效率问题
- Windows系统过滤病毒功能吗
- Join (left join / right jon / inner join / full join)
- IIS所需要的最小NTFS权限
- c# winform来显示进程和杀死进程
- mysql字段的增删改
- DirectSound 与 多线程问题
- 解决]VC:CDataGrid控件响应鼠标双击事件
- PHP5+XP+APACHE 的模块化配置方式
- 外籍专家在中关村图书大厦解密软件项目
- JNI
- 界面测试_转帖互动百科
- C# winform 窗体覆盖(遮住)系统任务栏 (代码收藏)
- href="javascript:void(0)"
- java数组小结