调用一个采集的C++库,用的双缓冲,因为采样率8k,所以每16ms其中一个缓存满可以取数。
我的做法是建一个线程一,线程中代码大致:while(!terminate)
{
while(flag0)//取缓存0的状态,直到提示缓存已满
{
Thread.Sleep(1);
}
//取数,入队列
while(flag1)//取缓存1的状态,直到提示缓存已满
{
Thread.Sleep(1);
}
//取数,入队列
}另开线程二对队列中的数据进行处理,比如存盘,但是发现数据有丢失。
线程一的优先级已经设为最高了,我该咋整啊?
我的做法是建一个线程一,线程中代码大致:while(!terminate)
{
while(flag0)//取缓存0的状态,直到提示缓存已满
{
Thread.Sleep(1);
}
//取数,入队列
while(flag1)//取缓存1的状态,直到提示缓存已满
{
Thread.Sleep(1);
}
//取数,入队列
}另开线程二对队列中的数据进行处理,比如存盘,但是发现数据有丢失。
线程一的优先级已经设为最高了,我该咋整啊?
{
while(flag==1)//当flag为1,表示缓存0已满,目前正在写缓存1
{
getflag();
Thread.Sleep(1);
}
//取缓存0中的数据,入队列
while(flag==0)//缓存1已满
{
getflag();
Thread.Sleep(1);
}
//取缓存1中的数据,入队列
}
所以不能简单地分成两个线程吧
你考虑过这种情况吗?缓存1先满,flag=0,而在很短的时间(0.0001ms)以内,缓存0也满了,flag=1,但是这样你就以为缓存1未满。
如果不是录音,你这个写法的问题在于当flag==1时,你处理完了,此时flag没变成0,还是1,继续下一次循环又进入了1处理了一遍相同的数据。