1. #include <Windows.h> 
  2. #include <tchar.h> 
  3. #include <stdio.h> 
  4.  
  5. #define MAX_THREADS 5 
  6.  
  7. DWORD WINAPI ThreadProc(LPVOID lpParam); 
  8.  
  9. typedef struct _THREAD_PARAM{ 
  10.     DWORD i; 
  11.     DWORD dwRandom; 
  12.     DWORD dwData; 
  13. }THREAD_PARAM,*LPTHREAD_PARAM; 
  14.  
  15. DWORD WINAPI ThreadProc(LPVOID lpParam){ 
  16.     LPTHREAD_PARAM lpData; 
  17.     lpData = (LPTHREAD_PARAM)lpParam; 
  18.     printf("TID = %u,\t Parameter = %u,%u,%u\n",GetCurrentThreadId(),lpData->i,lpData->dwRandom,lpData->dwData); 
  19.     HeapFree(GetProcessHeap(),0,lpData); 
  20.     return 0; 
  21.  
  22. INT main(void){ 
  23.     LPTHREAD_PARAM lpData; 
  24.     DWORD dwThreadId[MAX_THREADS]; 
  25.     HANDLE hThread[MAX_THREADS]; 
  26.     INT i; 
  27.  
  28.     for(i=0;i<MAX_THREADS;i++){ 
  29.         lpData = (LPTHREAD_PARAM)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(THREAD_PARAM)); 
  30.  
  31.         if(lpData == NULL){ 
  32.             printf("HeapAlloc error;\n"); 
  33.             ExitProcess(2); 
  34.         } 
  35.         lpData->i = i; 
  36.         lpData->dwData = 100; 
  37.         lpData->dwRandom = rand(); 
  38.  
  39.         hThread[i] = CreateThread(NULL,0,ThreadProc,lpData,0,&dwThreadId[i]); 
  40.         if(hThread[i] == NULL){ 
  41.             ExitProcess(i); 
  42.         } 
  43.     } 
  44.     system("pause"); 
  45.     return 0;