从声卡采集得数据放到一个缓冲队列中,有不定数目线程去读缓冲队列中数据,只有当所有得线程都读过一个缓冲区时,这个缓冲区才能再写进数据。怎么实现?

解决方案 »

  1.   

    呵呵,把你CreateThread返回的句柄保存在一个数组,在你的读缓冲区的函数里加上个判断语句,并加个事件,当数组中的每一个句柄(可以用GetCurrentThread()获得)都访问过后即触发事件就是了。
      

  2.   

    to mygoodday():
       你得方法我想过啦,这种方法不太好。
      

  3.   

    可以这样处理,添加一个全局变量threadCount,记录要访问缓冲区的线程数量,每个线程开始时使该计数器加一,退出时减一(注意要用CriticalSection保证数据更改时只有一个线程执行)。
    对每个缓冲区同样增加一个计数器accessCount,当每个线程访问过后加一;写缓冲区的线程要等到accesscount==threadCount后才可以更新缓冲区,更新后使accessCount=0。同样的,accessCount的写操作也要用CriticalSection保证访问的唯一性。
      

  4.   

    在主线程中设置N变量,BOOL flag;每一线程采集前设置flag = 0;
    采集完设置为1,当所有的都为1时开始读缓冲的内容
      

  5.   

    可以这样处理,添加一个全局变量threadCount,记录要访问缓冲区的线程数量,每个线程开始时使该计数器加一,退出时减一(注意要用CriticalSection保证数据更改时只有一个线程执行)。
    对每个缓冲区同样增加一个计数器accessCount,当每个线程访问过后加一;写缓冲区的线程要等到accesscount==threadCount后才可以更新缓冲区,更新后使accessCount=0。同样的,accessCount的写操作也要用CriticalSection保证访问的唯一性。
    其实这种方法本质上面就是信号量机制