MFC 总括 原创
- 程序:计算机指令的集合,它以文件的形式存储在磁盘上。
- 进程:程序运行的一次实例。 进程由两个部分组成: 1、操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。 2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。
程序执行过程:1、shell调用CreateProcess激活App.exe 。 2、系统产生一个“进程核心对象”,技术值为1 。3、系统为此进程建立一个4GB地址空间。 4、加载器将必要的代码加载到上述地址空间中,包括App.exe的程序、数据,以及所需的动态连接函数库(Dlls)。需要加载的被记录在可执行文件(PE文件格式)的.idata section中。 5、系统为此进程建立一个线程,称为主线程。线程才是CPU时间的分配对象。 6、系统调用C runtime 函数库的 Startup code。 7、Startup code 调用App程序的WinMain函数。 8、App开始运行。 9、使用者关闭App主窗口,使WinMain中的消息循环(不再赘述)结束掉,于是WinMain结束。 10、回到Startup code。 11、回到系统,系统调用ExitProcess结束进程。
- 线程:进程的实际运行对象。 线程由两个部分组成: 1、线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 2、线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。
线程创建执行过程:系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。 线程总是在某个进程环境中创建。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。
- MFC线程:MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外 的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来 执行任务。
- MFC命令消息传递:1、在CWinThread::Run中调用AfxWndProc。2、调用AfxCallWndProc。 3、CWnd::WindowProc。判定消息是否为WM_COMMAND消息,如是调用OnCommand。 4。。。。。。。

浙公网安备 33010602011771号