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 //功能:写线程的变量值发生变化后,就发送消息告诉读线程 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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与常成员函数