解决方案 »

  1.   

    AutoResetEvent 用这个没问题的,
    就算你两次Set 只要上次没执行完,就是没进入到WaitOne()阻塞,你执行多少次Set都没用
      

  2.   


    自动重置事件,两次set时间间隔很小的话,另一个线程WaitOne继续一次的,那就不对了,
    线程1:
    有数据1->加入队列->AutoResetEvent.set()
    有数据2->加入队列->AutoResetEvent.set()
    线程2:
    while(true)
    {
       AutoResetEvent.WaitOne();
       取队列
       ....进行其他较耗时操作
    }
    线程2只循环一次,取一次队列啊,我要想取两次值;或者用其他办法,只要让线程2别
    这样:
    whiile(true)
    {                      ---------------->这样很消耗cpu,或者会抢占其他线程cpu的
       object obj = queue.deueue();//取头元素
       if(null == obj)
       {
            ....进行其他较耗时操作
        }
    }
    ?
      

  3.   

    你搞错了吧
    要这样子线程1 有数据调用XXXEnQueueprivate void XXXEnQueue(xxx) 进队列
    {
        lock(queue)
        {
           queue.Enqueue(xxx);
           
        }
        auto.Set();
    }
    private xxx XXXDequeue() //取头元素
    {
       lock(queue)
       {
          return queue.Dequeue();
       }
    }
    线程2 whiile(auto.WaitOne()) 这样就成了
    {                      
        while(queue.Count>0)
        {
           object obj = XXXDequeue();
           if(null == obj)
           {
            ....进行其他较耗时操作
           }
        }
    }
      

  4.   

    那什么时候reset()?还有多个线程之间都可以auto.Set()吗?没加锁啊
      

  5.   


    那什么时候reset()?还有多个线程之间都可以auto.Set()吗?没加锁啊
      

  6.   

    你去reset()他做啥,根本不用reset();
    多个线程之间当然可以auto.Set(),你要了解生产者与消费者。关系。而不是一脑子在set reset上
      

  7.   

    我说的是手动事件reset;
    您没听懂我的原问题........如果用自动事件会是这样(有问题的):
    thread1 接data1时加入队列,set触发事件后thread2会把waitone走过后立马变为无信号,
    接data2后加入队列,set触发事件后thread2会把waitone走过后立马变为无信号,
    如果thread1中两次set时间间隔很小,thread2只会把waitone走过一次,就不再读数据了...........
      

  8.   

    大侠们,帮我看看这个问题呗http://bbs.csdn.net/topics/390729548