在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才能返回到调用程序

线程与消息循环的关系相关推荐

  1. 进程,线程,消息循环的关系

    一个进程有n个线程,一个线程有一个消息队列或事件队列和一个活动的消息循环,每个模态窗体有一个消息循环函数和一个消息响应过程函数,一个线程里哪个模态窗体激活即运行哪个窗体的消息循环,一个模态窗体里只有一 ...

  2. Android应用程序线程消息循环模型分析

    出自:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是通过消息来驱动的,即在应用程序的主线程(UI ...

  3. android 消息循环机制--looper handler

    Looper类说明   Looper 类用来为一个线程跑一个消息循环. 线程在默认情况下是没有消息循环与之关联的,Thread类在run()方法中的内容执行完之后就退出了,即线程做完自己的工作之后就结 ...

  4. 模态对话框的消息循环原理及分析笔记

    简述: APP消息循环和模态对话框中局部消息循环的关系 根据上图可以看出,在APP的消息循环再派发ONOK消息后,调用ModalDlg的响应函数,pWnd->OnOk();在该消息中, 会 进入 ...

  5. Windows 消息循环(1) - 概览

    本文从消息循环是如何驱动程序的这个角度,对 Windows 消息循环进行概览性介绍. 使用 EN5 课件获得更好的阅读体验: [希沃白板5]课件分享 : <Windows培训 - 消息循环> ...

  6. 模态对话框和非模态对话框的消息循环

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  7. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  8. MFC中的模态对话框与非模态对话框的消息循环及消息传递问题(都可以通过SendMessage传递消息)

    注意:非模态和模态对话框都有自己的消息响应过程函数WindowPro,只不过他们的调用模态是自己的消息泵,非模态是由父窗体或父窗体的上一级的消息泵来调用.模态对话框和非模态对话框都可以通过SendMe ...

  9. HandlerThread:带消息循环(Looper)的线程

    (1)Looper.prepare() 创建Looper,保存在线程局部变量(ThreadLocal) (2)onLooperPrepared() 回调消息循环前的准备方法 (可用于注册Handler ...

最新文章

  1. R语言使用caret包对GBM模型自定义参数调优:自定义优化参数网格、可视化核心参数与评估指标关系、Accuracy与树的深度、个数的关系、Kappa与树的深度、个数的关系
  2. python程序员招聘信息-IT行业程序员招聘分析
  3. 运行mysql数据库的命令_mysql 数据库常用命令
  4. spring注解注入IOC
  5. Android通过反射打造能够存储不论什么对象的万能SharedPreferences
  6. Windows常用运行库下载 (DirectX、VC++、.Net Framework等)
  7. 利用机器学习方法确定各个特征的权重
  8. css:table-cell的妙用
  9. 简易实现AI虚拟鼠标—手势控制鼠标
  10. 提取Excel中文字链接地址
  11. 音视频处理工具ffmpeg基本使用
  12. 【日志分析】Web日志分析
  13. RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)
  14. ==和equals判断两个字符串是否相等
  15. Putty的使用及登录
  16. 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64
  17. 2023上半年数学建模竞赛汇总(报名时间、比赛时间、难易程度、含金量、竞赛官网)
  18. Parcelable实战
  19. 前端JS表格打印和导出
  20. MAT Memory Analyzer Tool 插件安装(图解)

热门文章

  1. c语言调用linux脚本,C语言执行shellcode的五种方法
  2. 大文件分片上传前端框架_基于Node.js的大文件分片上传
  3. 第一章 初始MySQL
  4. udp 传输文件 java_Java 网络编程 之 UDP 文件传输
  5. android+adt+很慢,Android的模拟器,在ADT中调试运行AVD时,速度太慢
  6. java 数字表示什么意思是什么,读取Java字节码指令:数字是什么意思?
  7. mysql upgrade 失败_`mysql_upgrade`失败,没有给出真正的理由
  8. mysql dba 视频_MySQL DBA入门到高级系列视频教程 [高清完整版]
  9. 国家电网是“围城”?辞职吗?
  10. 晶振,数字电路的心脏~