我有两个线程:一个前台,一个后台,前台负责修改文本,后台线程负责检查文本,
我想做的是:
1.前台比后台有较高的优先权.
2.只有前台处于挂起时,后台才可以运行,且立即运行
3.只要前台一运行,后台就必须挂起,而且要从新检查文本,因为前台会修改文本我想不出任何办法能同步这两个线程.不知您有好办法吗?

解决方案 »

  1.   

    用任何办法都很难做到.
    比如用Enent:
    backThread()
    {
     while(1){
       waitforsingleobject(hEvent...);//block 
       while(1){ //loop 2
         check text...
       }
       ResetEvent(hEvent);
     }
    }
    forThread()
    {
      ResetEvent(hEvent);
      modify text...
      SetEvent(hEvent);
    }
    问题是forThread()运行后,ResetEvent(),backThread()如果正在check text 循环中,则无法马上退出循环不知道该如何?
      

  2.   

    forThread()
    {
      ResetEvent(hEvent);
      modify text...//some idle time
      SetEvent(hEvent);
    }
      

  3.   

    这不就是通讯问题嘛
    给你一点参考,可能还有更多方法(记得告诉我哦)。主要用的是event(使用CreateEvent和WaitForSingleObject等方法辅助)、msg(使用PostThreadMessage 和GetMessage等方法辅助),当然除了这两种方法以外还有mutex、Semaphore,dde、共享内存、系统环境量、本地tcp通讯,管道、邮槽、甚至文件、数据库等都可以进行线程或进程同步、通信。最后差点忘了,还有CriticalSection(是今天回答其它问题想到的)
      

  4.   

    几位还是没能给我一个圆满答复
    这样吧,无论各位用什么办法,event也好,mutex也好,semaphore也好,只要能给出一个简单例子,能达到我的要求,就是高手高高手
      

  5.   

    to:zheng_rui(第二刀)
    前2条好做,关键是第3条怎么做
      

  6.   

    问题:to freezingfire(寻找我的爱人) 
    后台消息唤醒时,他从被挂起的那一点开始运行,此时他可能正在检查文本也可能在修改某个数据,问题是他在何时检查这个标记,他如何得知自己刚刚被唤醒并且应该检查那个标志?