日期:2014-05-16  浏览次数:21056 次

C#多线程之间事件通知的疑难
我有两个线程,
线程1接受网络数据,存到队列;
线程2取队列,进行各种复杂的处理然后绘制到界面上;
想让线程1有数据了通知线程2,线程2再取队列,因为不通知的话,线程2一直在while循环检索队列时候有东西,很费cpu,怎么弄?
我现在用的是C#的ManualResetEvent,线程1给队列中加数据时,置为有信号,
线程2中,队列为空置为无信号,这样问题是置了好多个有信号,好浪费
也想过有AutoResetEvent,就怕两次set激活事件时间间隔太短会有问题........
怎么办啊????,不要循环检查而是等到1的通知
------解决方案--------------------

请百度 生产者与消费者。。。就会得到你想要的
------解决方案--------------------


你搞错了吧
要这样子

线程1 有数据调用XXXEnQueue

private 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)
       {
        ....进行其他较耗时操作
       }
    }
}