请问WaitForMultipleObjects函数的用法和意思?
请详细说明.

解决方案 »

  1.   

    WaitForSingleObject用于在某个对象(同步事件对象句柄、文件修改句柄、进程或线程句柄等)上阻塞线程(此时不占用CPU资源),直到传递给它的第一个参数被设置为信号点亮状态时,函数返回。它的第二个参数设置了等待时间,如果设置该参数为INFINITE,则WaitForSingleObject将无限期阻塞线程,直到第一个参数被设置为信号点亮状态。但是有时通过将第二个参数设置为0(不等待),并配合WaitForSingleObject的返回值(WAIT_OBJECT_0表示对象进入信号状态返回,WAIT_TIMEOUT表示超时返回)达到检测第一个参数状态的目的,这可以用于检测结束线程的信号是否被设置为信号状态以结束线程。但是值得注意的是,在将WaitForSingleObject的第二个参数设置为0来检查信号状态时,若第一个参数为同步事件对象,则该对象必须为手动事件,这是因为WaitForSingleObject每检查一次自动事件对象就将其重置。WaitForMultipleObjects在原理上与WaitForSingleObject相同,只是可以对多个对象进行监视而已。
      

  2.   

    意思很详细了,
    使用:
    以下代码,它展示了通过使用多线程函数或者多次调用一个单线程函数,可以创建多个的后台线程。#include 
    #include 
    #include typedef struct
    {
    DWORD frequency;
    DWORD duration;
    DWORD iterations;
    } honkParams;void HonkThread(honkParams *params)
    {
    DWORD i;for (i=0; i < params->iterations; i++)
    {
    Beep(params->frequency, params->duration);
    Sleep(1000);
    }GlobalFree(params);
    }void main(void)
    {
    HANDLE honkHandles[3];
    DWORD threadID;
    honkParams *params;
    DWORD count;
    CHAR freqStr[100];
    CHAR durStr[100];
    CHAR iterStr[100];for (count=0; count < 3; count++)
    {
    // allocate memory for a "params" structure
    params=(honkParams *) GlobalAlloc(GPTR, 
    sizeof(honkParams));cout << "Enter the beep frequency: ";
    cin.getline(freqStr, 100);
    params->frequency=atoi(freqStr);cout << "Enter the beep duration: ";
    cin.getline(durStr, 100);
    params->duration=atoi(durStr);cout << "Enter the number of beeps: ";
    cin.getline(iterStr, 100);
    params->iterations=atoi(iterStr);// create a thread and pass it the pointer 
    // to its "params" struct
    honkHandles[count]=CreateThread(0, 0,
    (LPTHREAD_START_ROUTINE) HonkThread, 
    params, 0, &threadID);
    }// wait for all threads to finish execution
    WaitForMultipleObjects(3, honkHandles, 
    TRUE, INFINITE); 
    }
      在运行以上代码时,该程序将会要求你输入一个频率、持续时间和发出响声的次数。你可以做三次这样的处理,如果你为每个线程设置足够高的发声次数的话,你将可以听到三个线程同时发出嘟嘟的响声。