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