日期:2014-05-18  浏览次数:20926 次

线程优先级最高还是丢数据,咋整啊
调用一个采集的C++库,用的双缓冲,因为采样率8k,所以每16ms其中一个缓存满可以取数。
我的做法是建一个线程一,线程中代码大致:
C# code

while(!terminate)
{
  while(flag0)//取缓存0的状态,直到提示缓存已满
  {
    Thread.Sleep(1);
  }
  //取数,入队列
  。。。
  while(flag1)//取缓存1的状态,直到提示缓存已满
  {
    Thread.Sleep(1);
  }
  //取数,入队列
  。。。
}


另开线程二对队列中的数据进行处理,比如存盘,但是发现数据有丢失。
线程一的优先级已经设为最高了,我该咋整啊?

------解决方案--------------------
你flag0和flag1分开到2个线程里去处理啊,和在一起会影响对方的。
------解决方案--------------------
看起来好像录音,如果是录音那应该有另一种回调的方式。
如果不是录音,你这个写法的问题在于当flag==1时,你处理完了,此时flag没变成0,还是1,继续下一次循环又进入了1处理了一遍相同的数据。