开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC

来源:互联网 发布:ubuntu安装32位库 编辑:程序博客网 时间:2022/05/28 00:05

 

 

第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

[cpp] view plaincopyprint?
  1. #include <stdio.h>     
  2. #include <process.h>     
  3. #include <windows.h>     
  4. #define  g_hThreadEvent(n) g_hThreadEvent##1  
  5.   
  6. unsigned int __stdcall Fun(void *pPM);    
  7. //线程个数  
  8. const int THREAD_NUM = 8;    
  9.   
  10. //循环次数  
  11. const int LOOP = 6;  
  12.   
  13. //互斥事件  
  14. HANDLE g_hThreadEvent[THREAD_NUM];  
  15.   
  16.   
  17. int main()  
  18. {  
  19.     printf("\t子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环10 次,\n接着再回到主线程又循环 100 次,如此循环50次\n");  
  20.   
  21.     int i = 0 , j;  
  22.     HANDLE hdl[THREAD_NUM];  
  23.   
  24.   
  25.     for (i = 0; i < THREAD_NUM; i++)   
  26.         g_hThreadEvent[i] = CreateEvent(NULL,FALSE,FALSE,NULL);  
  27.   
  28.     //将线程编号作为线程参数传进去,先转换为指针,再转换为整形,  
  29.     for (i = 0; i < THREAD_NUM; i++)   
  30.         hdl[i] = (HANDLE)_beginthreadex(NULL,0,Fun,(void*)i,0,NULL);  
  31.   
  32.       
  33.     SetEvent(g_hThreadEvent[0] );  
  34.   
  35.   
  36.     WaitForMultipleObjects(THREAD_NUM,hdl,TRUE,INFINITE);  
  37.   
  38.     for (i = 0; i < THREAD_NUM; i++)  
  39.     {  
  40.         CloseHandle(hdl[i]);  
  41.         CloseHandle(g_hThreadEvent[i]);  
  42.     }  
  43.   
  44.     return 0;  
  45. }  
  46.   
  47. unsigned int __stdcall Fun(void *pPM)  
  48. {  
  49.     int num = (int)pPM;  
  50.     int i = 0;  
  51.   
  52.     for( i  = 0 ; i< LOOP;i++)  
  53.     {  
  54.         WaitForSingleObject(g_hThreadEvent[num],INFINITE);  
  55.           
  56.         //printf("  线程ID=%d,线程编号是%c ,%d \n",GetCurrentThreadId(),num+'A');     
  57.          printf(" %c ",num+'A');  
  58.   
  59.          if(num+1 == THREAD_NUM )  
  60.              printf(" \n");  
  61.           
  62.         SetEvent(g_hThreadEvent[(num+1)%THREAD_NUM]);  
  63.     }  
  64.     return 0;  
  65. }  


 

 

 

原创粉丝点击