// 线程间通信.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#define WM_USER_MSG WM_USER+102
COPYDATASTRUCT SendText;
DWORD WINAPI Thread(LPVOID lpParameter)
{
COPYDATASTRUCT re_SendText;
char re_size[100];
MSG msg;
BOOL bRet;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if(bRet == -1)
{
//异常情况
}
else
{
switch(msg.message)
{
case WM_QUIT:
//退出消息循环
break;
case WM_USER_MSG:
printf("接收到消息\n");
memcpy(&re_SendText, (const void *)msg.lParam, sizeof(COPYDATASTRUCT));
memcpy(re_size, (const void *)re_SendText.lpData, re_SendText.cbData);
printf("消息内容是:%s\n", re_size);
break;
default:
break;
}
}
}
}
int _tmain(int argc, _TCHAR *argv[])
{
DWORD m_dwID;
COPYDATASTRUCT SendText;
char name[100] = "hello";
SendText.dwData = 3;
SendText.lpData = name;
SendText.cbData = strlen(name) + 1;
HANDLE m_hThread = CreateThread(NULL, 0, Thread, 0, 0, &m_dwID);
Sleep(1000);//这里不延迟,就收不到消息
PostThreadMessage(m_dwID, WM_USER_MSG, 0, (LPARAM)&SendText);
Sleep(1000);//这里不延迟,就收不到消息
getchar();
return 0;
}
© happyboy200032的博客 | Powered by LOFTER