#include <stdio.h>
#include <windows.h>
const DWORD THREAD_NUM = 50;//启动线程数
CRITICAL_SECTION g_cs;
HANDLE g_hThreadEvent;
int ThreadNum = 1;
DWORD i = 0;
DWORD WINAPI ThreadFun(void *pPM)
{
int Rec = *(int *)pPM;
SetEvent(g_hThreadEvent);
Sleep(500);
while(Rec!=ThreadNum);
EnterCriticalSection(&g_cs);
printf("线程%d开始执行\n",Rec);
ThreadNum++;
LeaveCriticalSection(&g_cs);
return 0;
}
int main()
{
int iRec = 0;
int i;
g_hThreadEvent = CreateEvent(NULL, FALSE,FALSE, NULL);
HANDLE handle[THREAD_NUM];
InitializeCriticalSection(&g_cs);
for (i = 0; i < THREAD_NUM; i++)
{
iRec = i+1;
handle[i] = CreateThread(NULL, 0, ThreadFun,&iRec, 0, NULL);
WaitForSingleObject(g_hThreadEvent, INFINITE);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
CloseHandle(g_hThreadEvent);
DeleteCriticalSection(&g_cs);
return 0;
}
#include <windows.h>
const DWORD THREAD_NUM = 50;//启动线程数
CRITICAL_SECTION g_cs;
HANDLE g_hThreadEvent;
int ThreadNum = 1;
DWORD i = 0;
DWORD WINAPI ThreadFun(void *pPM)
{
int Rec = *(int *)pPM;
SetEvent(g_hThreadEvent);
Sleep(500);
while(Rec!=ThreadNum);
EnterCriticalSection(&g_cs);
printf("线程%d开始执行\n",Rec);
ThreadNum++;
LeaveCriticalSection(&g_cs);
return 0;
}
int main()
{
int iRec = 0;
int i;
g_hThreadEvent = CreateEvent(NULL, FALSE,FALSE, NULL);
HANDLE handle[THREAD_NUM];
InitializeCriticalSection(&g_cs);
for (i = 0; i < THREAD_NUM; i++)
{
iRec = i+1;
handle[i] = CreateThread(NULL, 0, ThreadFun,&iRec, 0, NULL);
WaitForSingleObject(g_hThreadEvent, INFINITE);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
CloseHandle(g_hThreadEvent);
DeleteCriticalSection(&g_cs);
return 0;
}