happyboy200032的博客

线程间通信

// 线程间通信.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