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

推荐订阅源

I
InfoQ
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
Jina AI
Jina AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
博客园_首页
F
Fortinet All Blogs
博客园 - Franky
Latest news
Latest news
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
D
Docker
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Cloudbric
Cloudbric
V
Visual Studio Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理

博客园 - 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;
}