本帖最后由 suyangwei 于 2011-05-12 09:47:44 编辑

解决方案 »

  1.   

    定义一个全局变量 CRITICAL_SECTION cs;
    然后在程序初始化时执行 InitializeCriticalSection(&cs); 然后在主线程,子线程中要同步的代码下:
    {
     EnterCriticalSection(&cs);
    ...要同步的代码
     LeaveCriticalSection(&cs);}
    程序退出时执行
     DeleteCriticalSection(&cs);如修改子线程的运行规则或传递数据。
    都可以通过设置全局变量 然后在互斥代码里使用
      

  2.   

    Using Event Objects 也可以的哦,你可以查看MSDN,上面有详细的例子。
      

  3.   

    线程运行中非阻塞状态下,怎么接收event?
      

  4.   

    WaitForSingleObject之类的API可以等待同步对象有信
      

  5.   


    子线程等待是否有数据, 可以采用 Event 来实现让子线程有数据要处理时才起动, 没数据时挂起
    采用随便的一个volitale bool bRun变量, 可以实现子线程运行时检测自己是否要退出
    流程的变动, 实时性不高, 那么同样可以采用变量的方式, 让子线程在处理数据的时候改变规则, 假如每一种数据都有一种规则, 那么就把规则作为数据写入再呼叫子线程.
    假如要检测子线程的运行状态, 同样的采用普通的变量就可以控制. 
    假如实时性要求较高, 实时得知子线程运行状态, 可以采用Interlocked类的API来标识运行状态, 外部访问时也是采用Interlocked类的API来判断值即可. 
    多线程编写, 没有固定的模式的, 也没有安全的模式, 只有具体情况具体分析才能够发挥多线程的作用. 
      

  6.   

    就用普通的变量可以了, 每一步的处理, 子线程均是先判断标识再选择一下步的操作, 就像是否停止那样嘛.
    实现性要求比较高, 那么就采用Interlocked类的, 子线程发现Interlock的结果不一样, 就转处理流程.