线程通信-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. }  
转自:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值