惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
美团技术团队
Recent Announcements
Recent Announcements
B
Blog
GbyAI
GbyAI
雷峰网
雷峰网
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
V
V2EX
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏

博客园 - chuncn

Eslint 规则说明 磁盘阵列RAID原理、种类及性能优缺点对比 asp.net中调用命令行 JavaScript中的CSS属性对照表 webRTC-实时流媒体的福音 qt 5.1 quick vs qt 4.x quick for control zeroc ice的概念、组成与服务 国内外期货、外汇、股指期货 交易时间 使用Visual Leak Detector for Visual C++ 捕捉内存泄露 window8 metro 之 RSA sqlite in qt Windows环境下使用Boost Qt 表格&列表数据驱动化(c++) 原创 Qt读写INI配置文件 Qt多国语言的实现与切换(国际化) Qt编码风格 -- 转 c++中捕捉内存泄露、异常 win32 http download win32 DirectUI控件开发与调用指南
win32里玩事件-转
chuncn · 2012-04-07 · via 博客园 - chuncn
#include "stdafx.h"
#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(strTmp,"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(strTmp,"World %d %x",i++,p);
		PostThreadMessage(dwThreadId,UM_MSG2,(WPARAM)strTmp,(LPARAM)p);
		delete []p;
	}
	return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
	DWORD dwValue =GetCurrentThreadId();
	HANDLE hThread1 = CreateThread(NULL,0,&Thread1,&dwValue,0,NULL);
	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\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;
}