MFC-PostThreadMessage向指定线程发送消息

复制代码
#define WM_MyMessage (WM_USER+100)  //自定义消息号

UINT funcw(LPVOID pParam) //写线程
{
    DWORD ID = (DWORD)pParam; //获取读线程ID
    int n = 0;
    for (int i=0;i<1000;i++)
    {
        n = n + 2;
        BOOL b=PostThreadMessage(ID, WM_MyMessage,n,NULL); //将一个队列消息放入(寄送)到指定线程的消息队列里
        /*
        PostThreadMessage可以用于线程之间的异步通讯,不等待线程处理消息就返回
        参数1:DWORD 目标线程ID
        参数2:UINT消息号(消息的类型)
        参数3:WPARAM 指定附加的消息特定信息
        参数4: LPARAM 指定附加的消息特定信息
        返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。
        若想获得更多的错误信息,请调用GetLastError函数。
        如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队列,GetLastError返回ERROR_INVALID_THREAD_ID
        */
        Sleep(1000);

    }
          
    return 100;
}

UINT funcr(LPVOID pParam)
{
    
    //从消息队列里获取写线程发送过来的消息
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        switch (msg.message)
        {
        case WM_MyMessage:   //根据消息号进行判断
            int n = (int)msg.wParam;
            CString str;
            str.Format(_T("n=%d\r\n"),n);
            ::OutputDebugString(str);
            break;

        }
    }
    
        
    

    return 200;
}


void Cduoxiancen2Dlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    
        
    CWinThread* pp1 = AfxBeginThread(funcr, NULL); //读线程
    pp1->m_nThreadID;//当前线程的 ID

    CWinThread* pp = AfxBeginThread(funcw, (LPVOID)pp1->m_nThreadID);//写线程
    //传递的参数是读线程的ID
    //功能:写线程的变量值发生变化后,就发送消息告诉读线程



}
复制代码

 

 

 

 

 

 

posted @   天子骄龙  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-03-23 halcon-distance_lr计算直线和区域之间的距离
2022-03-23 halcon-distance_ss计算两条直线之间的距离
2019-03-23 C 宏定义
2019-03-23 C++ this与常成员函数
点击右上角即可分享
微信分享提示