您的位置:首页 > 移动开发 > Objective-C

WaitForSingleObject&WaitForMultipleObjects

2016-09-28 15:17 459 查看
WaitForSingleObject

#include "stdafx.h"

#include <iostream>

#include <windows.h> 

using namespace std;

DWORD WINAPI ThreadFun(PVOID par)

{

   cout<<"线程方法正在执行..."<<endl;

   Sleep(3000);

   return 0;

}

int _tmain(int argc, _TCHAR* argv[])

{
DWORD ThreadID;

    HANDLE hThread=CreateThread(NULL,0,ThreadFun,(void*)0,0,NULL);

    while(TRUE)

    {

       //这里等待时间是设置的1秒钟,可以设置为INFINITE(就不需要外面的死循环了)

       DWORD r= WaitForSingleObject(hThread,1000);

        if(r==WAIT_TIMEOUT)

        {

            cout<<"WAIT_TIMEOUT"<<endl;//输出2-3次

            continue;

        }

        else if(r==WAIT_OBJECT_0)

        {

            cout<<"WAIT_OBJECT_0"<<endl;//线程方法睡眠3秒以后输出

            break;

        }

        else

        {

            cout<<"hello"<<endl;

            continue;

        }

    }

    CloseHandle(hThread);

    system("PAUSE");

    return 0;
}

WaitForMultipleObjects

#include "stdafx.h"

#include <iostream>

#include <process.h>

#include <windows.h>

#define ThMax 3//线程数

using namespace std;

unsigned __stdcall ThreadFun(void* par)

{

   cout<<"线程"<<*((int*)par)<<"正在执行..."<<endl;

   Sleep(3000);

   return 0;

}

int _tmain(int argc, _TCHAR* argv[])

{
HANDLE hThreads[ThMax];

    int par[]={1,2,3};

    int i=0;

    while(TRUE)

    {

       if(i<3)

       {

          hThreads[i]=(HANDLE)_beginthreadex(NULL,0,&ThreadFun,(void*)&(par[i]),0,NULL);

          Sleep(500);

       }

       else

       {

          //详细参考:http://msdn.microsoft.com/en-us/library/ms687025(v=vs.85).aspx

          //bWaitAll参数如果设置为TRUE,那么就必须所有核心对象是激发状态才会返回,FALSE则一个就返回

          DWORD r=WaitForMultipleObjects(3,hThreads,TRUE,1000);

          if(r==WAIT_TIMEOUT)

          {

              cout<<"WAIT_TIMEOUT"<<endl;

              continue;

          }

          else if(r==WAIT_OBJECT_0)

          {

              cout<<"WAIT_OBJECT_0"<<endl;

              break;

          }

          else

          {

              cout<<"等待"<<endl;

              continue;

          }

       }

       i++;

    }

    for(int i=0;i<ThMax;i++)

    {

        CloseHandle(hThreads[i]);

    }

    cout<<"执行完毕"<<endl;

    system("PAUSE");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: