跨进程的SetParent

以前好像隐约听别人提到一次,一个进程的窗口可以跟另一个进程的窗口设置成父子关系。当时不太相信这样的说法,认为不可能的。真的能够跨进程SetParent吗? 看MSDN,SetParent里面说如果把hWndNewParent参数的值为NULL,则桌面窗口就是新的父窗口。桌面窗口就是在另外的explorer进程里面的,貌似是可以的,但是MSDN里面没有明确表态。今天我自己写了个测试程序,果然可以,真是毁三观啊,进程边界在哪里?跟之前想的完全不一样。 我最近想实现一个双核浏览器,就是在chromium浏览器的基础上加上IE内核,可以在Blink渲染引擎与Trident渲染引擎之间切换。这不是什么新东西了,国内的很多浏览器都实现这个技术,比如360安全浏览器,搜狗浏览器。我也要自己实现一个,虽然是重复的造轮子,但是在造轮子的过程中可以学到很多。 chromium的多进程架构我已经很熟悉了,就是renderer进程只负责渲染出网页,然后发送到browser进程去显示出来,同样browser进程把各种消息转发到renderer进程。IE的多进程架构则不一样,IE则是子进程真正的创建窗口,在窗口里面包了一个Internet... Read More | Share it now!

chromium开发设置代理

在中国,由于某些客观原因,经常无法访问google服务。在做chromium开发的时候,depot_tools工具经常无法正常运行,用git或者svn也不能从服务器获取到代码。 如果有vpn,开启vpn就好了。但是公司内部偏偏又不能使用vpn。不过路并未堵死,我们可以使用http代理来访问google服务。 depot_tools代理 运行gclient... Read More | Share it now!

在chromium中使用智能指针

在chromium这种多进程,多线程,代码量巨大的工程里,很多对象的创建、使用和销毁往往不在一个地方,对象的生命周期管理起来非常困难。这种情况下智能指针就能派上用场了。智能指针本身是一个局部的对象,它管理着堆上分配的对象的指针,当智能指针超出作用域是,要么销毁管理的对象,要么交出对象的管理权,让其他智能指针接管对象。 使用的最多的是scoped_ptr,而ScopedVector是类似std::vector来包含指针的容器,在他内部就是一个std::vector<T*>... Read More | Share it now!

chromium中的智能指针scoped_ptr

scoped_ptr会管理指针,它在超出自己作用域的时候自动调用自己的析构函数去销毁指针。 scoped_ptr也可以管理数组。 把scoped_ptr当作参数或者返回值,也可以在函数中使用它。 Pass()可以正确的处理向上的类型转换,比如: 也可以使用PassAs()明确向上转换 注意,PassAs只对scoped_ptr<T>有效,不能用于scoped_ptr<T[]>。 ... Read More | Share it now!

chromium中的LinkedList

为什么使用LinkedList而不是std::list? 使用LinkedList最大的理由是性能。一般来说std:list的erase操作的时间复杂度是O(n),因为std:list要遍历容器获得删除元素的迭代器。 而LinkedList的erase操作的时间复杂度是O(1),因为它直接用LinkNode的RemoveFromList方法去删除。 为什么LinkedList不跟std::list一样需要遍历迭代器呢?这是因为LinkedList中的元素不是复制到到容器中的,LinkedList中存放的是元素的指针,所以元素本身就可以调用RemoveFromList把自己从容器中删除。这个特性带来的另外一个好处:插入新元素的时候,LinkedList不需要从heap中分配内存。 LinkedList就是对元素指针进行简单的封装管理,优点是没有对管理的元素有复制操作,元素加入到容器,元素本身跟放入容器中的元素是一样的。 使用LinkedList 使用LinkedList前,需要用LinkNode把栈中的元素封装起来。如下: MyStruct就是我们要放入LinkedList中管理的真正数据类型。 LinkedList可以管理栈中的元素,也可以管理堆中的元素。  注意 不能从一个函数中返回LinkedList<MyNodeType>,因为LinkedList.root_已经失效。 总结 总体来说使用LinkedList还是挺繁琐的,应用场景也比较特殊,而且不能使用stl中那些标准的算法。所以除非为了追求极致的性能,还是推荐使用std::list。 LinkedList代码: ... Read More | Share it now!