g_hUpdateSemph = CreateSemaphore(NULL,1,1,NULL);
          WaitForSingleObject(g_hUpdateSemph,INFINITE);
          ReleaseSemaphore(g_hUpdateSemph,1,&dwPrevCnt);
那位兄第能解释一下这三个函数的意思

解决方案 »

  1.   

    WaitForSingleObject 挂起线程。等待一个事件。如果要恢复线程运行可以用SETEVENT()函数。
      

  2.   

    类似于互斥体对象的处理,首先创建信号对象
    HANDLE CreateSemaphore( );
    或者打开一个信号对象
    HANDLE OpenSemaphore( );
    然后在线程的访问共享资源之前,调用WaitForSingleObject,
    共享资源访问完后,释放对信号对象的占用
    ReleaseSemaphore();
    信号对象允许同时多个线程共享资源的访问,在创建对象时指定最大可同时访问线程数,当一个线程申请访问成功后,信号对象中的计数器减一,调用ReleaseSemaphore函数后,信号对象中的计数器加一。其中计数器值大于等于0,小于等于创建时指定的最大值。利用信号对象,我们不仅可以控制共享资源的访问,还可以在应用的初始化时候使用,假定一个应用在创建一个信号对象时,设置其计数器的初始值为0,这样就阻塞了其它线程,保护了资源,待初始化完成后,调用ReleaseSemaphore函数增加其计数器至最大值,进行正常的存取访问。
      

  3.   

    everandforever(Forever)老兄讲的精彩,可以了。
    具体可以参考<windows高级编程>第3版