zoukankan      html  css  js  c++  java
  • Windows程序的生与死

    Windows程序分为“程序代码”和“UI资源”两大部分最后以RC编译器整合为一个完整的EXE档案。

    “以消息为基础,以事件驱动(message based,event driven)”

    Windows程序的进行是依靠外部发生的事件来驱动,程序不断等待任何可能的输入,然后做出相应的判断并进行适当的处理。“输入”是操作系统捕捉到之后,以消息形式进入程序之中。对于”输入“的分类可以分为由硬件设备所产生的消息,放在系统队列(system queue)中,以及由windows系统或者其他windows程序传送过来的消息,放在程序队列(application queue)

    程序的开始与结束大致如下:

    1、程序初始化中调用CreateWindow,为程序建立一个窗口,作为程序的屏幕舞台,CreateWindow产生窗口之后会送出WM_CREATE直接给窗口函数,后者于是可以在此时做初始化操作(配置内存,打开文件等等)

    2、在程序活着的过程中,不断以GetMessage从消息队列中抓取消息。如果这个消息是WM_QUIT,GetMessage会传回0而结束while循环,进而结束整个程序。

    3、DispatchMessage通过Windows USER模块的协助与监督,把消息分配至窗口函数,消息将在该处被判别并处理。

    4、程序不断进行以上2、与3、的操作。

    5、当使用者按下系统菜单中的Close命令项时,系统送出WM_CLOSE,通常程序的窗口函数不会拦截此消息,于是DefWindowProc处理它。

    6、DefWindowProc收到WM_CLOSE后,调用DestroyWindow 把窗口清除,DestroyWindow本身又会送出WM_DESTROY。

    7、程序对WM_DESTROY的标准反应所调用PostQuitMessage。

    8、PostQuitMessage 送出WM_QUIT消息,准备让消息循环中的GetMessage取得,结束消息循环

  • 相关阅读:
    【JDK】JDK源码分析-Semaphore
    【JDK】JDK源码分析-CyclicBarrier
    【JDK】JDK源码分析-CountDownLatch
    【JDK】JDK源码分析-ReentrantLock
    【JDK】JDK源码分析-AbstractQueuedSynchronizer(3)
    【JDK】JDK源码分析-AbstractQueuedSynchronizer(2)
    【JDK】JDK源码分析-AbstractQueuedSynchronizer(1)
    如何判断无线和网线是否在同一网段?
    Android Studio+SVN配置生成apk文件
    Java冒泡排序
  • 原文地址:https://www.cnblogs.com/kratos0517/p/3087183.html
Copyright © 2011-2022 走看看