线程与消息循环的关系
在win32平台中,每一个线程都拥有自己的消息队列。
线程的消息来源有3个:
外设 系统 其他线程
线程可以发送消息到属于相同或不同进程的其他线程,发送的方式是Send或Post。
在Win32平台中,一个很重要的概念是窗口并不拥有消息队列,窗口过程处理消息,消息来源于创建该窗口的线程。系统会把线程消息队列中的消息发给当前活动的窗口。
PostMessage
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
当线程调用这个函数时,系统确定哪一个线程建立了有hwnd参数标识的窗口,然后系统分配一块内存,将这个消息参数存储到这块内存中,并将这块内存链接到响应线程的投递消息队列中。
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
PostQuitMessage(int nExitCode)
该函数终止线程调用它的线程,但是,该函数实际上并不链接到一个消息到投递消息队列。
PostThreadMessage
该函数与PostMessage不同的是,该函数只投递消息到线程,而不指明发给线程创建的那一个窗口。
SendMessage
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
SendMessage函数可以将消息直接发给一个窗口过程。只有等消息被处理之后,SendMessage才能返回到调用程序
线程与消息循环的关系相关推荐
- 进程,线程,消息循环的关系
一个进程有n个线程,一个线程有一个消息队列或事件队列和一个活动的消息循环,每个模态窗体有一个消息循环函数和一个消息响应过程函数,一个线程里哪个模态窗体激活即运行哪个窗体的消息循环,一个模态窗体里只有一 ...
- Android应用程序线程消息循环模型分析
出自:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是通过消息来驱动的,即在应用程序的主线程(UI ...
- android 消息循环机制--looper handler
Looper类说明 Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在run()方法中的内容执行完之后就退出了,即线程做完自己的工作之后就结 ...
- 模态对话框的消息循环原理及分析笔记
简述: APP消息循环和模态对话框中局部消息循环的关系 根据上图可以看出,在APP的消息循环再派发ONOK消息后,调用ModalDlg的响应函数,pWnd->OnOk();在该消息中, 会 进入 ...
- Windows 消息循环(1) - 概览
本文从消息循环是如何驱动程序的这个角度,对 Windows 消息循环进行概览性介绍. 使用 EN5 课件获得更好的阅读体验: [希沃白板5]课件分享 : <Windows培训 - 消息循环> ...
- 模态对话框和非模态对话框的消息循环
1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...
- 模态对话框和非模态对话框的消息循环分析
1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...
- MFC中的模态对话框与非模态对话框的消息循环及消息传递问题(都可以通过SendMessage传递消息)
注意:非模态和模态对话框都有自己的消息响应过程函数WindowPro,只不过他们的调用模态是自己的消息泵,非模态是由父窗体或父窗体的上一级的消息泵来调用.模态对话框和非模态对话框都可以通过SendMe ...
- HandlerThread:带消息循环(Looper)的线程
(1)Looper.prepare() 创建Looper,保存在线程局部变量(ThreadLocal) (2)onLooperPrepared() 回调消息循环前的准备方法 (可用于注册Handler ...
最新文章
- R语言使用caret包对GBM模型自定义参数调优:自定义优化参数网格、可视化核心参数与评估指标关系、Accuracy与树的深度、个数的关系、Kappa与树的深度、个数的关系
- python程序员招聘信息-IT行业程序员招聘分析
- 运行mysql数据库的命令_mysql 数据库常用命令
- spring注解注入IOC
- Android通过反射打造能够存储不论什么对象的万能SharedPreferences
- Windows常用运行库下载 (DirectX、VC++、.Net Framework等)
- 利用机器学习方法确定各个特征的权重
- css:table-cell的妙用
- 简易实现AI虚拟鼠标—手势控制鼠标
- 提取Excel中文字链接地址
- 音视频处理工具ffmpeg基本使用
- 【日志分析】Web日志分析
- RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)
- ==和equals判断两个字符串是否相等
- Putty的使用及登录
- 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64
- 2023上半年数学建模竞赛汇总(报名时间、比赛时间、难易程度、含金量、竞赛官网)
- Parcelable实战
- 前端JS表格打印和导出
- MAT Memory Analyzer Tool 插件安装(图解)
热门文章
- c语言调用linux脚本,C语言执行shellcode的五种方法
- 大文件分片上传前端框架_基于Node.js的大文件分片上传
- 第一章 初始MySQL
- udp 传输文件 java_Java 网络编程 之 UDP 文件传输
- android+adt+很慢,Android的模拟器,在ADT中调试运行AVD时,速度太慢
- java 数字表示什么意思是什么,读取Java字节码指令:数字是什么意思?
- mysql upgrade 失败_`mysql_upgrade`失败,没有给出真正的理由
- mysql dba 视频_MySQL DBA入门到高级系列视频教程 [高清完整版]
- 国家电网是“围城”?辞职吗?
- 晶振,数字电路的心脏~