C++ 学习之旅 Windows程序内部运行原理

 更新时间:2012年11月01日 21:32:49   作者:  
学习C++与.net不同的是,一定要搞清楚Windows程序内部运行原理,因为他所涉及大多数是操作系统的调用,而.net毕竟是在.netFrameWork上唱戏

学习C++与.net不同的是,一定要搞清楚Windows程序内部运行原理,因为他所涉及大多数是操作系统的调用,而.net毕竟是在.netFrameWork上唱戏。

       那Windows应用程序,操作系统,计算机硬件之间的相互关系究竟什么了,下面的图就给予很好的解释。

      向下箭头①是 应用程序运行判断处理的结果,输出到输出的设备。

      向上箭头②是输入设备,输入到操作系统中。

      向下箭头③代表API,我们要解释以下API是什么。API是应用程序接口, 表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。这个关系好比有个机器人能够完成行走的功能,但是,如果人们不告诉它往哪个方向上走,机器人是不会主动行走的。这里的机器人就是操作系统,人们就是应用程序。 对程序员来说,就可以理解为可以调用函数库,C++程序员是对操作系统的同用。Java中调用的API是jdk中提供的函数库,而。net程序员则是.netframework提供的函数库。

     向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按敲了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的哪一键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个司机开车看见前面遇到一辆车,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将踩刹车,停下来,或是英勇撞上去(则是一个sb做法)。对事件作出反应。

      操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。

MSG结构定义如下:
typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;的过程就是消息响应。  

     其实,写在这里,作为一个做过3年.net开发人员。我这里有感而发,C++是如此,.net事件响应的机制。何尝不是一个消息机制。 消息机制,是程序界一大质的飞跃,而也是这种消息机制,把.net程序员的控件封装太死, 也造就一大批只能拖控件的程序员。 我学了C++还是真的有一种豁然开朗的感觉。.net程序员,还是多看点C++吧!

相关文章

  • C++中需要注意的细节你知道吗

    C++中需要注意的细节你知道吗

    这篇文章主要介绍了C++ 需要注意的几点细节,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • C++中的数据内存分布原理

    C++中的数据内存分布原理

    这篇文章主要介绍了C++中的数据内存分布,主要从动态内存管理方式,内存泄漏等方面介绍的,文中也有相关的示例代码,需要的朋友可以参考下
    2023-05-05
  • C++ 的类型转换详解

    C++ 的类型转换详解

    本篇文章是对C++ 类型转换的详细介绍,需要的朋友参考下,小编觉得这篇文章写的不错,希望能够给你带来帮助
    2021-11-11
  • 详解C++中const_cast与reinterpret_cast运算符的用法

    详解C++中const_cast与reinterpret_cast运算符的用法

    这篇文章主要介绍了C++中const_cast与reinterpret_cast运算符的用法,经常被用于表达式中的类型转换,需要的朋友可以参考下
    2016-01-01
  • C++算法计时器的实现示例

    C++算法计时器的实现示例

    本文主要介绍了C++算法计时器的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C++报错 XX does not name a type;field `XX’ has incomplete type的解决方案

    C++报错 XX does not name a type;

    这篇文章主要给大家介绍了C++报错 XX does not name a type;field `XX’ has incomplete type解决方案,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2023-08-08
  • C++ 两个类通过智能指针进行访问操作代码

    C++ 两个类通过智能指针进行访问操作代码

    在C++中,有多种方法可以实现将一个函数传递给另一个类,并在该类中调用该函数,您可以选择将函数作为回调函数或通过类的成员函数来实现,这篇文章主要介绍了C++ 两个类通过智能指针进行访问操作,需要的朋友可以参考下
    2023-08-08
  • C语言 递归解决青蛙跳台阶问题

    C语言 递归解决青蛙跳台阶问题

    递归做为一种算法在程序设计语言中广泛应用。基本含义​是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知
    2021-11-11
  • C++进化后的const变量实例探究

    C++进化后的const变量实例探究

    这篇文章主要为大家介绍了C++进化后的const变量实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • C++数据结构之AVL树的实现

    C++数据结构之AVL树的实现

    AVL树是高度平衡的而二叉树,它的特点是AVL树中任何节点的两个子树的高度最大差别为1,本文主要给大家介绍了C++如何实现AVL树,需要的朋友可以参考下
    2022-06-06

最新评论