c++线程间通信

c++线程间通过PostThreadMessage和GetMessage函数进行通信,下面用代码演示两个线程间的通信:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include<windows.h>
using namespace std;


DWORD WINAPI ThreadFun1(LPVOID param);
DWORD WINAPI ThreadFun2(LPVOID param);

#define MY_MSG  WM_USER+1 //定义用户消息

int main()
{
    DWORD threadID1;
    HANDLE hThread1 = CreateThread(NULL,0, ThreadFun1,NULL,0, &threadID1);
    HANDLE hThread2=  CreateThread(NULL,0, ThreadFun2,(PVOID)threadID1,0, NULL);
    HANDLE hThread[] = { hThread1 ,hThread2 };
    WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    
    return 0;
}
DWORD WINAPI ThreadFun1(LPVOID param)
{
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        switch (msg.message)
        {
        case MY_MSG:
            printf("收到消息%d\n", msg.wParam);
            break;
        }
    }
    printf("收到WM_QUIT\n");
    return 0;
}
DWORD WINAPI ThreadFun2(LPVOID param)
{
    DWORD threadId = (DWORD)param;
    int N = 1;
    while (true)
    {
        if (N <= 10) {
            PostThreadMessage(threadId, MY_MSG, (WPARAM)N++, NULL); 
        }
        else {
            PostThreadMessage(threadId, WM_QUIT, NULL, NULL);
            break;
        }
            
        Sleep(1000);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值