線程通信-PostThreadMessage

  1. #include <stdio.h>  
  2. #include <windows.h>  
  3. #include <iostream.h>  
  4. #include <process.h>  
  5. #define UM_MSG1 WM_USER+1  
  6. #define UM_MSG2 WM_USER+2  
  7. DWORD WINAPI Thread1(LPVOID para)  
  8. {  
  9.       
  10.     DWORD dwThreadId = *(DWORD *)para;  
  11.     DWORD i=0;  
  12.     TCHAR *p;  
  13.     char strTmp[100];  
  14.       
  15.     while(TRUE)  
  16.     {  
  17.         Sleep(1700);          
  18.         p=new TCHAR[10];  
  19.         sprintf(strTmp,"Hello %d %x",i++,p);  
  20.         PostThreadMessage(dwThreadId,UM_MSG1,(WPARAM)strTmp,(LPARAM)p);  
  21.         //delete []p;  
  22.     }  
  23.       
  24.     return 0;     
  25.       
  26. }  
  27. DWORD WINAPI Thread2(LPVOID para)  
  28. {  
  29.       
  30.     char strTmp[100];  
  31.     DWORD dwThreadId = *(DWORD *)para;  
  32.     DWORD i=0;  
  33.     TCHAR *p;  
  34.     while(TRUE)  
  35.     {  
  36.           
  37.         Sleep(3000);  
  38.         p=new TCHAR[10];  
  39.         sprintf(strTmp,"World %d %x",i++,p);  
  40.         PostThreadMessage(dwThreadId,UM_MSG2,(WPARAM)strTmp,(LPARAM)p);  
  41.         //delete []p;  
  42.     }  
  43.       
  44.     return 0;  
  45.       
  46. }  
  47. int main()  
  48. {  
  49.       
  50.     DWORD dwValue =GetCurrentThreadId();  
  51.     cout<<"GetCurrentThreadId "<<dwValue<<endl;;  
  52.     HANDLE hThread1 = CreateThread(NULL,0,&Thread1,&dwValue,0,NULL);  
  53.     HANDLE hThread2 = CreateThread(NULL,0,&Thread2,&dwValue,0,NULL);  
  54.     CloseHandle(hThread1);  
  55.     CloseHandle(hThread2);  
  56.     MSG msg;  
  57.     while(GetMessage(&msg,NULL,0,0))  
  58.     {  
  59.         switch(msg.message)  
  60.         {  
  61.         case UM_MSG1:  
  62.         case UM_MSG2:  
  63.             printf("msg:0x%x /t%x /t%s0/n",msg.message,msg.lParam,msg.wParam);  
  64.             //註釋掉這句你就會看到堆內存地址變化  
  65.             delete [](TCHAR *)msg.lParam;    
  66.             break;  
  67.         default:  
  68.             printf("Unknown msg:0x%x/n",msg.message);  
  69.             break;  
  70.         }  
  71.         Sleep(1);  
  72.     }  
  73.     return 0;  
  74. }  
轉自:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章