Chinaunix首页 | 论坛 | 博客
  • 博客访问: 766952
  • 博文数量: 171
  • 博客积分: 3629
  • 博客等级: 中校
  • 技术积分: 1779
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-23 21:21
文章分类

全部博文(171)

文章存档

2019年(4)

2018年(7)

2017年(1)

2016年(4)

2014年(1)

2013年(8)

2012年(10)

2011年(50)

2009年(12)

2008年(10)

2006年(56)

2005年(8)

分类: WINDOWS

2006-03-04 21:49:27

虽然DOTNET已经扑面而来,但仔细一看线程,进程方面的类,好象都是封装的API,在书中的例子对应的C#实现也是更简单一些,只要是框架里有的封装类都很方便使用.
 
下面是偶的一些笔记吧
 
第八章第三页
最简单的互锁函数,可以原子方式改变一个变量。
int g_x=0;
...
InterlockedExchangeAdd(&g_x,1);

在DOTNET中可以用Interlocked类来递增一个变量,也可以赋新值
lock语句用互斥体实现
    System.Object lockThis = new System.Object();
    lock(lockThis)
    {
        // Access thread-sensitive resources.
    }
 
如上所述,C#这个语言不错,如果框架里没有这个类可就麻烦的,调用API可不是容易的事,至少对偶来说.
 
 
好象偶所有的不解之处在这本书里都得到了解答.如内核对象的描述实在太精彩了,还有CreateProcess函数的介绍更让偶大开眼界.连C runtime函数都给出了代码.象许多的黑客技术原来来自于这儿.在网上零散的哪儿都有,恐怕象偶这样的菜菜都需要这样一本书.如果对windows有何不解之处,不妨看看这本书.
 
偶对CreateProcess函数的理解在这儿写出来,希望得到高手的指点,偶刚学,就不怕见笑了.
 
CreateProcess运行在父进程的环境当中,对于C/C++语言的程序来说(作者说的),有两种情况:
一是在我的电脑里面直接双击一个可执行程序,Explorer 进程就会为我们执行CreateProcess函数,传过去的文件名自然是双击的可执行程序.
二是在程序中调用CreateProcess函数
为了使新进程成为独立进程.无论哪种情况,在此函数返回后,调用CloseHandle函数使新进程主线程内核对象的使用计数减一.这样当新进程的主线程结束时系统会清理主线程对象等内核资源.如果没有这一步,新进程的主线程结束了,此线程对象也得不到释放,因为父进程还拥有一个使用计数.同理要把新进程对象的使用计数也要减一,CloseHandle就是完成这个任务的.
在CreateProcess函数内部应该有以下过程:
创建进程对象,分配内存地址,起到装载器的作用,把文件装载到内存,需要的DLL等等问题.最后调用C RUNTIME函数,而此函数会负责初始化一此程序中的全局变量等,再把 WinMain之类函数需要的参数初始化并压入堆栈,最后调用WinMain函数.其中C启动函数会用CreateThread创建主线程,因为这是建立线程的唯一方式.
 
此C启动函数嵌入EXE文件,估计是引入函数,还需要系统中有相应的DLL,否则不能运行.不过这种情况可能比中六合彩还难.呵呵.这点请高人指教.个人理解而已.
 
 
阅读(1353) | 评论(2) | 转发(0) |
0

上一篇:分区表分析

下一篇:linux 0.11源代码和分析

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