1. #include <stdio.h>
  2. #include <windows.h>
  3. //#include <iostream>
  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. DWORD dwThreadId = *(DWORD *)para;
  10. DWORD i = 0;
  11. TCHAR *p;
  12. char strTmp[100];
  13. while(TRUE)
  14. {
  15. Sleep(1700);
  16. p = new TCHAR[10];
  17. sprintf_s(strTmp, 100, "Hello %d %x ", i++, p);
  18. PostThreadMessage(dwThreadId, UM_MSG1, (WPARAM)strTmp, (LPARAM)p);
  19. //delete []p;
  20. }
  21. return 0;
  22. }
  23. DWORD WINAPI Thread2(LPVOID para)
  24. {
  25. char strTmp[100];
  26. DWORD dwThreadId = *(DWORD *)para;
  27. DWORD i = 0;
  28. TCHAR *p;
  29. while(TRUE)
  30. {
  31. Sleep(3000);
  32. p=new TCHAR[10];
  33. sprintf_s(strTmp, 100, "World %d %x", i++, p);
  34. PostThreadMessage(dwThreadId, UM_MSG2, (WPARAM)strTmp, (LPARAM)p);
  35. //delete []p;
  36. }
  37. return 0;
  38. }
  39. int main()
  40. {
  41. printf("UM_MSG1: 0x%x/r/n", UM_MSG1);
  42. printf("UM_MSG2: 0x%x/r/n", UM_MSG2);
  43. DWORD dwValue = GetCurrentThreadId();
  44. HANDLE hThread1 = CreateThread(NULL, 0, &Thread1, &dwValue, 0, NULL); // &Thread1可写作Thread1, 都是函数指针.
  45. HANDLE hThread2 = CreateThread(NULL, 0, &Thread2, &dwValue, 0, NULL);
  46. CloseHandle(hThread1);
  47. CloseHandle(hThread2);
  48. MSG msg;
  49. while(GetMessage(&msg, NULL, 0, 0))
  50. {
  51. switch(msg.message)
  52. {
  53. case UM_MSG1:
  54. case UM_MSG2:
  55. printf("msg: 0x%x      w: %x   ws: %s     l: %x/r/n", msg.message, &msg.wParam, msg.wParam, msg.lParam);
  56. delete [](TCHAR *)msg.lParam;  //注释掉这句你就会看到堆内存地址变化
  57. break;
  58. default:
  59. printf("Unknown msg:0x%x/n",msg.message);
  60. break;
  61. }
  62. Sleep(1);
  63. }
  64. return 0;
  65. }

用消息在Win32控制台程序多线程间进行通讯的更多相关文章

  1. 【转】WIN32 控制台程序

    http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...

  2. Win32控制台程序和Win32应用程序

    刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了. win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运 ...

  3. vs2008 新建win32控制台程序提示:脚本错误

    解决方案: 1.根据错误信息中的url,找到对应文件夹下的htm文件 2.使用notepad++打开default.htm文件,找到错误提示的434行,注释掉433和434行 然后保存文件,重新新建w ...

  4. 再谈Delphi关机消息拦截 -- 之控制台程序 SetConsoleCtrlHandler(控制台使用回调函数拦截,比较有意思)

    这里补充一下第一篇文章中提到的拦截关机消息 Delphi消息拦截:http://blog.csdn.net/cwpoint/archive/2011/04/05/6302314.aspx 下面我再介绍 ...

  5. Java 多线程间的通讯

    在前一小节,介绍了在多线程编程中使用同步机制的重要性,并学会了如何实现同步的方法来正确地访问共享资源.这些线程之间的关系是平等的,彼此之间并不存在任何依赖,它们各自竞争CPU资源,互不相让,并且还无条 ...

  6. win32控制台程序 宽字符与短字符转化

    由于vs各版本之间存在字符设置不兼容问题,特总结char与tchar的互相转换函数,如下,在之后的工程中可以使用. void TcharToChar(const TCHAR * tchar, char ...

  7. 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59

    加上 即可 // 隐藏窗口#pragma   comment(linker,   "/subsystem:\"windows\"  /entry:\"mainC ...

  8. vc2010 win32 控制台应用程序中文乱码

    vc2010 win32 控制台应用程序中文乱码 在 vc2010 上用 win32 控制台程序写些测试代码调用 windows api ,处理错误信息时,发现用 wprintf 输出的错误信息出现了 ...

  9. VS中空项目、win32项目、控制台程序的区别(转)

    空项目,大多数想单纯创建c++工程的新同学,打开vs后很可能不知道选择创建什么工程,这时候请相信我,空项目是你最好的选择.因为空工程不包含任何的源代码文件,接下来你只需要在相应的源代码文件夹和头文件文 ...

随机推荐

  1. gcc -L -l的使用

    -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so ...

  2. ARM Cortex-M

    振荡周期.时钟周期.机器周期.指令周期 一个机器周期包含12个振荡周期或6个时钟周期 指令的执行时间称作指令周期(单.双.四周期) (1)振荡周期       振荡周期指为单片机提供定时信号的振荡源的 ...

  3. Python-字符串开头或结尾匹配

    startswith() 和 endswith() 方法提供了一个非常方便的方式去做字符串开头和结尾的检查. 1.查看指定目录下的所有文件名 >>> import os >&g ...

  4. less样式表

    LESS是一种由Alexis Sellier设计的动态层叠样式表语言.受Sass所影响,同时也影响了Sass的新语法:SCSS.[2]  LESS是开源的,其第一个版本由Ruby写成,但在后续的版本当 ...

  5. 对于数据操作的SQL语句精粹(长期更新)

    --删除空格 Update [Table] Set [Column]=Replace([Column],' ','') --查出左右和右边带空格的数据 select RTRIM( LTRIM([Col ...

  6. 修改Servlet模板

    1.找到jar文件 查看MyEclipse根目录下的myeclipse.ini,找到Common文件夹的位置,打开文件夹..\Common\plugins 找到文件 com.genuitec.ecli ...

  7. MySQL 5.6 root密码丢失,使用mysqld --skip-grant-tables

    MySQL 5.6 root密码丢失,(window平台)使用mysqld –skip-grant-tables启动MySQL服务,出现警告: 1 [Warning] TIMESTAMP with i ...

  8. Spark问题记录

    Spark 多线程时的序列化问题  临时记录 Exception in thread "Thread-28" org.apache.spark.SparkException: Ta ...

  9. CSS中cursor的pointer 与 hand-备

    cursor:hand 与 cursor:pointer 的效果是一样,都像手形光标(在浏览器上时   鼠标会显示成 小手 ).但用FireFox浏览时才注意到使用cursor:hand在FireFo ...

  10. 渐变颜色的进度条WGradientProgress-备用

    今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移动的, ...