我有两个方法(函数),一个是“生产者”,往队列里不定时插入新元素;另一个则是消费者,取出队列中最旧的元素进行“消费”.....在某个情况下,消费者需要某个特定元素才能继续消费下去,这个特定元素没出现前必须“等待”,我要问的就是——在.NET下如何用代码实现这个“等待”?

解决方案 »

  1.   

    >>> 在.NET下如何用代码实现这个“等待”
    不太清楚你的意思,如果是要线程暂停,可以:
    bool pause = true;
    while(pause)
    {
    Thread.Sleep(1000);
    }
      

  2.   

    重载队列的入队操件,然后每次入队时激发一个事件,应该可以吧
    Class Myqueue
        Inherits System.Collections.Queue
        Public Event AddNew(ByVal obj As Object)
        Overloads Sub Enqueue(ByVal obj As Object)
            Me.Enqueue(obj)
            RaiseEvent AddNew(obj)
        End Sub
    End Class
      

  3.   

    以前翻的一片文章就是按这个模式进行设计来多线程加载数据,并实现排队处理工作项。
    中间需要考虑队列为空或满的情况。
    http://blog.csdn.net/zhzuo/archive/2004/06/10/22037.aspx
      

  4.   

    不好意思,举例解释一下队列Qfunc1 //写队列
    {
      ......
      for(int i=0;i<strIn.Length;i++)  
      {
        Q.Enqueue(strIn[i]);  //将字符串写进队列,例如“ABCDEFGH...”
      }
      ......
    }func2   //要从队列中获得一个字符串如“ABCDEFGH”,但队列中可能只有“ABCD”,
            //“EFGH”还没有加进....
    {
      string str1 += Q.Dequeue;
      if(q.count==0 & str1不是"ABCDEFG")  
      {
        //等待“EFGH”加进队列  <-------------我想实现的步骤
        ......
      }
      

  5.   

    fun2
    {
        string str1=String.Empty();
        while(true)
         {
              if(str1=="ABCDEFG")
              break;
              if(q.count>0)
              str1+=q.dequeue();
               
          }
    }