各位好,在.net compact framework下线程通讯的问题向大家请教!
有一个移动设备上的应用程序,其中启动了两个线程,A和B,线程A负责读取数据,每隔一定时间从串口读取数据,并将读取的数据加入一个队列中,线程B负责从队列中读取并处理数据。我想实现的效果是:在线程A执行过程中,也就是读取数据的过程中,挂起线程B,直到A的读取过程完毕后,再让线程B继续执行。也就是说,优先保证操作系统资源分配给A。我试过设置线程A和B的优先级,没什么效果,.net compact framework好像又不支持EventWaitHandle类,所以向大家请教一下,有没有什么办法,谢谢!

解决方案 »

  1.   

    谢谢huwei2003:数据不是一次或多次可以读完的,是不停地读,而B也需要实时去分析数据,只是实时性要求不高
      

  2.   


    如果A是读取的串口,
    读取时挂起线程B
    读完毕的条件应该可以确定吧,然后启用B。
    这样的逻辑会让B线程分析处理断档啊,什么样的需求会这样?假设:
    A读到很多Byte数据,然后是不是需要等待B去处理,再让A处理
    否则B永远只有短短1、2毫秒处理,A又启动了,可以吗?你这样使用A\B线程,感觉根本不是在用多线程就是一个线程,你仔细想想先读取完毕,处理,再读取,处理要用多线程就根本不需要让B在A读取时挂起。
      

  3.   

    谢谢navysong :
    A读取数据是隔一定的周期,如200ms,并且每次读的数据多少不一,所以,希望A不读数据的时候,B能分析数据,同时,B的处理速度,并不一定能跟得上数据读取的速度。"B线程分析处理断档"这句话不太理解,请指教
      

  4.   

    谢谢yhy0611 :用一个线程处理不行,因为你读数据后马上处理,可能在你还没处理完的时候,读缓冲已经满了,会有数据丢失
      

  5.   

    A、B 两个线程看LZ的描述完全就是互斥的嘛,没必要两个线程,一个线程同步执行就可以了
      

  6.   

    汗这么简单的问题 
    Thread t=new Thread(call);
    Thread t1=new Thread(call1);
    t.Start()
    t1.start()
    t.join();还有 你不如直接同步
    我觉得 如果是等待输入完 在去 监视没什么意义可以 使用
    一个
    while(true)
    {
    //一直简单线程t,有输入立即响应,当t的 ThreadState==ThreadState.Stopped 就break
    }