用消息在Win32控制台程序多线程间进行通讯
- #include <stdio.h>
- #include <windows.h>
- //#include <iostream>
- //#include <process.h>
- #define UM_MSG1 (WM_USER + 1)
- #define UM_MSG2 (WM_USER + 2)
- DWORD WINAPI Thread1(LPVOID para)
- {
- DWORD dwThreadId = *(DWORD *)para;
- DWORD i = 0;
- TCHAR *p;
- char strTmp[100];
- while(TRUE)
- {
- Sleep(1700);
- p = new TCHAR[10];
- sprintf_s(strTmp, 100, "Hello %d %x ", i++, p);
- PostThreadMessage(dwThreadId, UM_MSG1, (WPARAM)strTmp, (LPARAM)p);
- //delete []p;
- }
- return 0;
- }
- DWORD WINAPI Thread2(LPVOID para)
- {
- char strTmp[100];
- DWORD dwThreadId = *(DWORD *)para;
- DWORD i = 0;
- TCHAR *p;
- while(TRUE)
- {
- Sleep(3000);
- p=new TCHAR[10];
- sprintf_s(strTmp, 100, "World %d %x", i++, p);
- PostThreadMessage(dwThreadId, UM_MSG2, (WPARAM)strTmp, (LPARAM)p);
- //delete []p;
- }
- return 0;
- }
- int main()
- {
- printf("UM_MSG1: 0x%x/r/n", UM_MSG1);
- printf("UM_MSG2: 0x%x/r/n", UM_MSG2);
- DWORD dwValue = GetCurrentThreadId();
- HANDLE hThread1 = CreateThread(NULL, 0, &Thread1, &dwValue, 0, NULL); // &Thread1可写作Thread1, 都是函数指针.
- HANDLE hThread2 = CreateThread(NULL, 0, &Thread2, &dwValue, 0, NULL);
- CloseHandle(hThread1);
- CloseHandle(hThread2);
- MSG msg;
- while(GetMessage(&msg, NULL, 0, 0))
- {
- switch(msg.message)
- {
- case UM_MSG1:
- case UM_MSG2:
- printf("msg: 0x%x w: %x ws: %s l: %x/r/n", msg.message, &msg.wParam, msg.wParam, msg.lParam);
- delete [](TCHAR *)msg.lParam; //注释掉这句你就会看到堆内存地址变化
- break;
- default:
- printf("Unknown msg:0x%x/n",msg.message);
- break;
- }
- Sleep(1);
- }
- return 0;
- }
用消息在Win32控制台程序多线程间进行通讯的更多相关文章
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
- Win32控制台程序和Win32应用程序
刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了. win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运 ...
- vs2008 新建win32控制台程序提示:脚本错误
解决方案: 1.根据错误信息中的url,找到对应文件夹下的htm文件 2.使用notepad++打开default.htm文件,找到错误提示的434行,注释掉433和434行 然后保存文件,重新新建w ...
- 再谈Delphi关机消息拦截 -- 之控制台程序 SetConsoleCtrlHandler(控制台使用回调函数拦截,比较有意思)
这里补充一下第一篇文章中提到的拦截关机消息 Delphi消息拦截:http://blog.csdn.net/cwpoint/archive/2011/04/05/6302314.aspx 下面我再介绍 ...
- Java 多线程间的通讯
在前一小节,介绍了在多线程编程中使用同步机制的重要性,并学会了如何实现同步的方法来正确地访问共享资源.这些线程之间的关系是平等的,彼此之间并不存在任何依赖,它们各自竞争CPU资源,互不相让,并且还无条 ...
- win32控制台程序 宽字符与短字符转化
由于vs各版本之间存在字符设置不兼容问题,特总结char与tchar的互相转换函数,如下,在之后的工程中可以使用. void TcharToChar(const TCHAR * tchar, char ...
- 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59
加上 即可 // 隐藏窗口#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainC ...
- vc2010 win32 控制台应用程序中文乱码
vc2010 win32 控制台应用程序中文乱码 在 vc2010 上用 win32 控制台程序写些测试代码调用 windows api ,处理错误信息时,发现用 wprintf 输出的错误信息出现了 ...
- VS中空项目、win32项目、控制台程序的区别(转)
空项目,大多数想单纯创建c++工程的新同学,打开vs后很可能不知道选择创建什么工程,这时候请相信我,空项目是你最好的选择.因为空工程不包含任何的源代码文件,接下来你只需要在相应的源代码文件夹和头文件文 ...
随机推荐
- Java开发者易犯错误Top10
本文总结了Java开发者经常会犯的前十种错误列表. Top1. 数组转换为数组列表 将数组转换为数组列表,开发者经常会这样做: List<String> list = Arrays.asL ...
- 关于C#中的抽象类、抽象方法和虚方法的探究
2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了. 在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的 ...
- 关于链接target的问题
<a href="http://www.baidu.com" target="_blank">点击链接</a> target: _bla ...
- Create new Android Virtual Device时不能创建
在Create new Android Virtual Device时不能创建... 因为之前有重装过系统,ADT和java都没有更换,不知道是不是有哪里的环境(C盘中的配置)出错了... LOG在下 ...
- 使用 Nginx 来反向代理多个 NoderCMS
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- debug 心得
前天做了一个题,就是个简单的状压记忆化搜索,但是debuge了俩小时,给我整的快吐血了,各种不可思议的错误,我都要怀疑是不是电脑有毛病了,后来发现数组开小了,看来以后遇到不可思议的错误就要检查数组开没 ...
- PHP正则表达式屏蔽电话号码中间段
要屏蔽电话号码中间段,首先要知道电话号码的正则表达式. 先来看看PHP匹配电话号码的正则表达式. 匹配固定电话的正则表达式为: /(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\- ...
- quartz spring
简单例子可参考 http://yangpanwww.iteye.com/blog/797563 http://liuzidong.iteye.com/blog/1118992 关于时间配置可参考另一篇 ...
- python学习第十五天 -面向对象之继承和多态
大家都知道面向对象的三大特性:封装,继承,多态.封装特性在上一章节已经讲解过.这一章节主要讲解继承和多态. 继承: 当定义一个类的时候,可以从现有的类进行继承.那么新定义的类可以称为子类,被继承的现有 ...
- GoogLeNet学习心得
转自:http://blog.csdn.net/liumaolincycle/article/details/50471289#t0 综述: http://blog.csdn.net/sunbaigu ...