Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407371
  • 博文数量: 57
  • 博客积分: 193
  • 博客等级: 入伍新兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 14:37
个人简介

当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘

文章分类

全部博文(57)

文章存档

2017年(5)

2015年(7)

2014年(27)

2013年(18)

我的朋友

分类: Windows平台

2013-06-10 22:35:55

因为自己是从事汽车软件编程的,Windows平台根本用不到,自己也只是兴趣所在,没事时喜欢研究Windows底层及架构相关的东西。在我看来,Windows是个很成功的操作系统,在很多方面都是很值得研究学习的。它就好比一个座金矿,能挖到多少金子,那完全领依靠个人的悟性了。自己研究,也没有指导,完全是自得其乐。
      
以前用Windows API,因为用得少,总是觉得理解不够透彻,几天不用,其用法就不记得了。今天再次翻看《Windows核心编程》,看到线程那部分,好像有点开窍了。记录如下:

         线程有个函数:void Sleep(DWORD dwMillsecond),这个函数大家都应该比较熟悉,线程休眠的。如果只是理解到这里,那还不行。什么是线程休眠?其本质是OS不执行线程函数了,所以:线程休眠=OS调度。换句话说,当你使用Sleep函数时,脑子里要想到你其实是在间接地控制调度器。理解到这一层,从API上升到OS,显然更易于记忆了。

         另外一个函数:void SwitchToThread(void),这个函数是没有参数的,为什么没有参数?如果有参数,其形式显然应该是这样:void SwitchToThread(DWORD threaded),如果这样设计API,那显然就是让你来主动控制线程的调度了,这当然不是OS所希望的。所以,被设计成无参的,相当于你命令OS强制做一次线程调度。

         再比如,句柄,这个东西很抽象,但我们要把握一点:句柄=对象引用记数。一个句柄表示一个对象引用记数,那么对象结构中显然要有个成员记录其引用记数,为什么要引用记数呢?因为对象由对象管理器来管理,要适时清除。所以,句柄à对象引用计数à对象管理器。当然了,还可以再引申。对象要清除,由哪个进程来清除?清除前会不会有什么回调函数?如果有,为什么有?如果没有,为什么没有?

         一点小理解,与同行交流。

阅读(1986) | 评论(0) | 转发(0) |
0

上一篇:Perl文件夹操作

下一篇:MCU编程之我见1

给主人留下些什么吧!~~