Windows线程、界面、消息剖析

本文深入探讨Windows中线程、界面和消息之间的关系。首先解释线程作为执行流的角色,强调进程与线程的区别。然后,讨论了Windows消息的概念,包括消息的来源、处理和队列。通过分析消息处理函数WndProc,揭示了SendMessage和DispatchMessage在消息处理过程中的作用。最后,实验验证了线程间消息传递的可能性,并讨论了模态和非模态对话框的消息处理机制。
摘要由CSDN通过智能技术生成
 

对于很多人来说,VC开发Windows界面程序,一般都基于MFC界面库,当前MFC并非windows下唯一的VC界面库,但由于历史原因,其使用者绝对是最多的。我们不对MFC库进行研究,仅仅是研究下windows中线程、界面、消息直接的关系。

 

线程是什么?线程就是一个执行流,它可以被CPU调度执行。被CPU调度执行,更准确应该说是被操作系统调度,因为计算机硬件系统只是触发一个中断,而具体中断后如何处理,是操作系统底层的处理,而时间片的中断一般触发了操作系统进程切换,所以应该说是被操作系统调度。

 

那通过上边对进程调度的简单描述,可以发现,进程、线程这些被操作系统调度的执行流,本质上也是数据,包含有代码数据、数据数据、寄存器数据。如果我们完全清楚Windows的存储机制,内存数据含义,理论上来说,我们可以直接修改内存而让系统产生一个进程,只是实际工作来说太复杂。

 

当然,上边的叙述中有些模糊的地方,例如多次一起提到进程、线程,但本质上来说,进程进程只是一组线程的一个载体,更像一个集合的含义,感觉上有点类似家与人的关系,一个家至少有一个人,每个人是独立的个体,并且大家有联系,属于一个家庭,可以使用家里的所有资源。

 

这样来看,进程中实际的执行体是线程,以前说进程堆栈,本质上指线程堆栈,每个线程有自己独立的堆栈。以上内容比较容易理解,操作系统类似课程讲的也比较多了。

 

 

那下一个概念,在windows中什么是消息?

我认为这一部分内容很生硬,最主要的原因是很多东西只能看文档说明,而不好用实践来证明,不过我们尽量努力把它弄清楚。

 

了解这里的前提,先建立一个win32项目,也就是windows应用程序项目,千万别建MFC项目。建立完成后,可以看到里边最为核心的一段代码,

// 主消息循环:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

它用于从消息队列中获取消息,然后处理消息。

 

这里就涉及三个问题:

1、 消息队列在哪里?

2、 消息从哪里来?

3、 消息对应的事

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值