15,471
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#pragma warning(disable: 4786)
#include <stdio.h>
#include <iostream.h>
#include<windows.h>
#define Max_Count 10
HANDLE g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
CRITICAL_SECTION g_CriSec;
DWORD g_threadId[10];
HANDLE g_hOperation[10];
static void putEx(char *pChar)
{
EnterCriticalSection(&g_CriSec);
puts(pChar);
LeaveCriticalSection(&g_CriSec);
};
static DWORD WaitThread(LPARAM lparm)
{
int nIndex = *(int*)lparm;
printf("线程启动\n");
return 0;
}
int main()
{
InitializeCriticalSection(&g_CriSec);
for(int i = 0; i< Max_Count; i++)
{
g_hOperation[i] = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&WaitThread,
&i, NULL, &g_threadId[i]);
}
while(1)
{
int nIndex = 0;
DWORD dwRtn = WaitForMultipleObjects(Max_Count, g_hOperation, FALSE, INFINITE);//为什么这个地方的dwRtn 返回值一直是0呢。奇怪了。所以求助下
switch (dwRtn)
{
case WAIT_TIMEOUT:
putEx("等待超时");
break;
case WAIT_FAILED:
putEx("等待失败");
break;
default:
{
nIndex = dwRtn - WAIT_TIMEOUT;
if(nIndex <= Max_Count && nIndex >= 0)
{
printf("关闭句柄%d\n", nIndex);
CloseHandle(g_hOperation[nIndex]);
g_hOperation[nIndex] = NULL;
}
}
}
DeleteCriticalSection(&g_CriSec);
}
return 0;
}