多线程编程示例

来源:互联网 发布:smtp端口号是多少 编辑:程序博客网 时间:2024/03/29 22:16


#include "stdafx.h"
#include <windows.h>

#define THREAD_NUM 50 //线程数

CRITICAL_SECTION g_cs;

int ThreadProc(LPVOID lpParam)
{
 int x = *(int*)lpParam;
 for (int i=0; i<5; i++)
 {
  EnterCriticalSection(&g_cs);
  printf("[%d]:%d\n",x,i);
  LeaveCriticalSection(&g_cs);
 }
 return x;
}

int _tmain(int argc, _TCHAR* argv[])
{
 InitializeCriticalSection(&g_cs);

 HANDLE hThread[THREAD_NUM];
 int nValue[THREAD_NUM];
 for (int i=0; i<THREAD_NUM; i++)
 {
  nValue[i] = i;
  hThread[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,(LPVOID)&nValue[i],0,NULL);
 }

 WaitForMultipleObjects(THREAD_NUM,hThread,TRUE,INFINITE); //等待所有线程执行完毕

 DWORD dwCode = 0;
 for (int i=0; i<THREAD_NUM; i++)
 {
  if (GetExitCodeThread(hThread[i],&dwCode)) //获取各个线程的返回值
   printf("%d\n",dwCode);
  CloseHandle(hThread[i]);
 }

 DeleteCriticalSection(&g_cs);

 return 0;
}