去买本《windows核心编程》仔细看一遍

解决方案 »

  1.   

    有2个线程
    分别从1跑到100,现在有个要求,由于A比较慢,当线程B跑到50的时候,就要等A也跑到50,然后继续跑B跑到50的时候,执行WaitForSingleObject,没信号就睡觉
    当A跑到50的时候,执行SetEvent,设置有信号,然后A就不管了继续执行,这时,线程B被唤醒,B也继续执行后面的代码CreateEvent来建立信号对象,当然WaitForSingleObject还可以对hThread,hProcess执行等待
      

  2.   

    假如传递给WaitForSingleObject的是一个互斥体对象,
    // 创建一个互斥体时,第二个参数设为false,此时没有任何一个线程拥有该互斥体对象,
    // 这时这个互斥体对象就被操作系统标记为有信号状态
    hMutex:= CreateMutex(nil, false, nil);// 在一个线程函数中
    begin
    // 这时由于这个互斥对象不属于任何一个线程,即有信号状态,
    // 操作系统就把当前线程的id指派给该互斥对象的线程id ,并把该互斥对象标记为无信号状态 
    WaitForSingleObject(hMutex,INFINITE);
    // do something...