WaitForSingleObject ( hThrd, INFINITE );
   一句话:激发才返回,否则停在代码处.
   所以对于不同的核心对象,应根据激发的不同含义,理解不同的核心对象被调用的时候,产生不同的效果.
   (1) 激发的大体理解:  要被作事情还没作事情的对象就处于激发态,而正在作事情的对象则不处于激发态.(和人很相像)
   (2) 对于线程  
          线程结束才激发,所以当此函数用于线程核心对象的时候,相当于等待线程的结束,而这样等待又不会很占CPU的时间.这个函数对于线程的理解也可以相似的应用于对其他核心对象的理解.
   (3) 对于临界区
           临界区在这个函数上的应用基本没有,但思想却有很大的联系,在一个线程进入到临界区并将它锁住的方式相当于,其他线程Wait...();
   (4) 对于互斥锁 
           如果Mutex没有被任何线程所拥有,它就处于激发态,一个线程调用WaitForSingleObject(第一个参数是互斥锁对象,...)意思就是,这个线程等待其他线程用资源完毕的时候,再用这个资源,也就是说,这个线程等待互斥锁激发后开始工作.而它开始工作的时候,其他线程也可以调用Wait()函数等待这个线程作完工作.
   (5) 对于信号量
            首先要理解信号量的含义,
            它允许多个线程再同一时刻访问同一资源,但需要限制在同一时刻访问此资源的最大线程数目,每增加 一个线程对共享资源的访问,当前的计数器就减1,只要当前 的计数器是大于0的,就可以发出信号量. 
            如果最大允许访问资源数为1,信号量和互斥锁等价..
            信号量和WaitForSingleObject()的关系.可以使用任何一种wait()函数要求锁定一个信号量 ,锁定一次,信号量减一次1,但不是要求锁定的线程可以独自拥有资源(因为信号量本身就是多元的),但当信号量减到0的时候,除非有线程释放资源,否则wait()函数不会返回,这和互斥锁就有些相似了.

解决方案 »

  1.   

    要是有人需要的话,我想可以贴出原代码。waitforXXX的内核原代码
      

  2.   

    (3) 对于临界区
               临界区在这个函数上的应用基本没有,但思想却有很大的联系,在一个线程进入到临界区并将它锁住的方式相当于,其他线程Wait...();
    我不知道这里你说的临界区是不是CriticalSection,假如是的话,这个不是内核对象,他的实现也不是用Wait...来实现的,可以到我的BLOG找一下CRITICALSECTION的原代码。
    BTW:LINUX上的类似的也不是用内核对象实现的
    实际上,你可以自己模拟一个简单的。
      

  3.   

    原代码地址在:
    http://blog.vckbase.com/bastet/archive/2005/03/22/3884.html
    http://blog.vckbase.com/bastet/archive/2005/03/19/3724.htmlhttp://blog.vckbase.com/bastet/archive/2005/03/22/3870.html