博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程间通信常用的三种方法
阅读量:5873 次
发布时间:2019-06-19

本文共 1116 字,大约阅读时间需要 3 分钟。

多线程通信的方法主要有以下三种: 

1.全局变量
进程中的线程间内存共享,这是比较常用的通信方式和交互方式。
注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。
2.Message消息机制
常用的Message通信的接口主要有两个:PostMessagePostThreadMessage
PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
2.1.PostMessage() 
函数原型:
    B00L PostMessageHWND hWndUINT MsgWPARAM wParamLPARAM lParam);
参数:
    hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
    HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口
和弹出式窗口。消息不被寄送到子窗口。
    NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
    Msg:指定被寄送的消息。
    wParam:指定附加的消息特定的信息。
    IParam:指定附加的消息特定的信息。
    返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。
MS还提供了SendMessage方法进行消息间通讯,SendMessage(),他和PostMessage的区别是:
SendMessage是同步的,而PostMessage是异步的。SendMessage必须等发送的消息执行之后,才返回。
2.2.PostThreadMessage()
PostThreadMessage方法可以将消息发送到指定线程。
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
参数除了ThreadId之外,基本和PostMessage相同。
目标线程通过GetMessage()方法来接受消息。
注:使用这个方法时,目标线程必须已经有自己的消息队列。否则会返回ERROR_INVALID_THREAD_ID错误。可以用
PeekMessage()给线程创建消息队列。

3.CEvent对象
CEventMFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

 

转载于:https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7403645.html

你可能感兴趣的文章
java 初识对象和对象引用的关系
查看>>
区块链共识协议最详细的分析
查看>>
H5小游戏 【篇一】 组词游戏
查看>>
免费小说阅读小程序
查看>>
在react-router中进行代码拆分
查看>>
vue JS 对象赋值
查看>>
第一个springboot项目
查看>>
新的开始 | Arthas GitHub Star 破万后的回顾和展望
查看>>
Spark in action on Kubernetes - Playground搭建与架构浅析
查看>>
react源码ReactTreeTraversal.js之数据结构与算法
查看>>
mysql锁(Innodb)
查看>>
一致性 Hash 算法的实际应用
查看>>
css3动画
查看>>
设计模式的知识大纲分享
查看>>
PHP 命令行方式实现异步多进程模式的任务处理
查看>>
React Fiber知识点学习笔记
查看>>
「DigitalOcean Droplet」 Server Overview
查看>>
腾讯 Tars-Go 服务 Hello World——从 HTTP 开始
查看>>
java重入锁、公平锁和非公平锁
查看>>
webpack4系列教程(二):创建项目,打包第一个JS文件
查看>>