一 MFC程序执行过程剖析1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派...
分类:
编程语言 时间:
2015-04-13 14:23:50
阅读次数:
164
一 MFC程序执行过程剖析1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派...
分类:
编程语言 时间:
2015-04-02 09:01:35
阅读次数:
222
优化项目过程中发现了一个很Low的问题,整理一下,备忘:
说问题之前先看下HandlerThread的定义
一个封装了looper的线程:
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来...
分类:
移动开发 时间:
2015-03-16 23:15:54
阅读次数:
234
Looper与Handle是Android独有的新概念,但我们学习中常常将他们分开学习,实际上两者密不可分。
Looper与Handle的关系:
Looper是负责在线程里建立消息循环的类,包括准备,开始循环,停止等整个消息循环的生命周期。Handle是负责不同线程之间消息的类,包括消息的发送,接受,清除等消息的生命周期。
但是只有存在Looper的线程,才会用到Handle。没有Handle...
分类:
移动开发 时间:
2015-03-15 21:24:32
阅读次数:
145
GetMessage(&msg,hwnd,0,0),它是检索消息队列,直到检索到WM_QUIT返回FASLE结束循环,一般结束消息循环进程也就结束了。
我到MSDN上查到GetMessage()这个函数,MSDN上的解释是这样的:
hWnd
[in] Handle to the window whose messages are to be retrieved. The window mu...
分类:
编程语言 时间:
2015-03-15 19:52:59
阅读次数:
232
用CreateWindow 函数创建的控件,如果想使用tap键切换,最简单的做法是:主窗口有WS_EX_CONTROLPARENT扩展属性,控件有WS_TAPSTOP属性。然后最重要的是,在处理消息循环时要做一个判断:1 while (GetMessage(&msg, NULL, 0, 0)...
在Android系统中的应用程序,与Java的应用程序相同,都是靠消息驱动,简单的说就是:有一个消息队列,我们可以不断的向这个消息队列中添加消息,并从中取出消息,处理消息。Android中与此工作相关的主要是由Handler,Looper以及Message来完成。
Looper类:为一个线程运行着一个消息循环,内部有一个消息队列,每一个线程只允许最多存在一个Looper;
Handler类:允许你向...
分类:
移动开发 时间:
2015-03-13 16:30:39
阅读次数:
208
面对复杂如操作系统的一个工程,我们应该如何学习,学习什么,从哪里入手?下面是一篇学习指引:
关于Chromium code base,有许多需要学习的,宏观层次比如:进程及其相互之间的关系,IPC如何工作,URL加载流程;微观层次比如:智能指针,消息循环,线程用法,线程模型,string等的使用指引。
学习Chromium的“行为处事”:
编码风格:http://www.chromium.o...
分类:
其他好文 时间:
2015-03-06 09:45:06
阅读次数:
317
多线程的麻烦
多线程编程是一件麻烦的事,相信很多人深有体会。执行顺序的不确定性,资源的并发访问一直困扰着众多程序员。解决多线程编程问题的方法分为两类:一是对并发访问的资源直接加锁;二是避免并发访问资源;Chromium采用第二种思想来设计多线程模型,通过在线程之间传递消息来实现跨进程通讯。
设计原则
Chromium希望尽量保持UI处于响应状态。为此遵循如下设计原则:
1...
分类:
编程语言 时间:
2015-03-06 09:44:23
阅读次数:
242
在Android系统里的线程分为有消息循环的线程和没有消息循环的线程。我们上一节介绍的应用程序主线程就是一个有消息循环的线程,而通过直接继承Thread类的线程是没有消息循环的线程,当然我们也可以通过在线程里调用Looper.prepare(),让系统为该线程建立一个消息队列。下面我们介绍两种常用的...
分类:
编程语言 时间:
2015-03-04 12:34:38
阅读次数:
183