******************************************************************************************************************************************
13:4.1.8 进程的当前目录
“如果进程的当前目录是。。。。。。它们只是读取这些变量。”
根据这一段的意思,假设我有E:\\Test\\ReadMe.txt,
首先,我添加环境变量E=E:\\Test,
然后调用CreateFile打开E:\\ReaeMe.txt,那么系统首先查看环境变量发现E存在,那么就试图从E:\\Test下打开ReadMe.txt文件。如果不存在则从E:ReadMe.txt打开。(主要是这里)
不知道这样的理解对吗?如果正确,那么添加环境变量后,应该是可以的,但是实际上却是不行的。难道是我哪里的理解有问题。
还有就是,如果是E:\\Test\\ReadMe.txt,我现在要添加一个环境变量E,来标识E:\\Test\\ReadMe.txt,然后将环境变量E添加到当前进程的环境块中,这个怎么做呢?
14:GetEnvironmentVariable函数和SetEnvironmentVariable函数仅仅是针对当前进程有效吗?还有就是如何获取当前进程的环境块的所有信息?
15:4.2.1 pszApplicationName和pszCommandLine
“在内部CreateProcess并不会修改我们虽传递的命令行字符串。不过,在CreateProcess返回之前,它将该字符串恢复为它的原始形式”这里的恢复到原始形式是个什么意思?
16:“这个问题很重要,如果命令行参数不包含在文件映像的只读部分中,就会发生违规访问,。。” 是什么意思?
17:4.3.2 ExitProcess函数
该部分的那段代码,执行结果有问题,无论如何全局对象都是看不到被析构的(Why??)。
******************************************************************************************************************************************
19:第6章 线程的基础知识 6.4.2 cbStackSize
“/STACK:[reserve][.commit]
reserve参数用于设定系统应该... ... 当线程的堆栈溢出它的堆栈时,就会产生一个异常条件。系统抓取该异常条件,并且将另一页用于保留空间,这使得线程的堆栈大小能根据需要动态的扩大。”
该段是什么意思?我的理解是:reserve(或者cbStackSize)用于设定线程堆栈大小的上限值(默认为1MB),在线程创建后,系统会默认的分配给线程一定的堆栈空间的大小n,这个n往往是小于1MB的,当线程使用的堆栈空间超出n时,系统自动的为该线程扩展一点空间,扩展的这点空间就是一页(或者是commit设定的值,如果是2那么就增加2页)的大小,扩展后的堆栈大小是n+1页。(不知这样的理解是否正确?)
21:6.6 线程的一些性质
“另外,由于使用BaseThreadStart,线程函数可以在它完成处理后返回。当BaseStartThread... ... ... ... 并且BaseThreadStart将试图返回到某个随机内存位置。”
该段要描述什么意思?实在不太明白,个人理解就是:因为在BaseThreadStart中调用我们的线程函数,因此我们的线程函数自然能够完成返回,而BaseThreadStart函数本身调用了ExitThread因此就不会返回。而这段描述想要描述什么意思?
22:6.7 C/C++运行期库的考虑
“那么系统是否知道在创建线程时分配该数据块呢?回答是不知道。... ... ... 若要创建一个线程,绝对不要调用操作系统的CreateThread函数,必须调用C/C++运行期库函数_beginthreadex..” 为什么作者在这里提到在程序中,要调用C/C++库中的函数_beginthreadex而不使用CreateThread呢?难道就是为了降低程序对系统函数接口的依赖?而且查看C源代码发现实际上_beginthreadex也是调用CreateThread的。
******************************************************************************************************************************************
23:第7章 7.1 暂停和恢复线程
“一旦改变了线程的环境,必须使线程成为可调度的线程”为什么?不成为调度又会怎么样?
000:其他 关于实时操作系统、分时操作系统、抢占式多任务操作系统的具体区别 ,主要是实时和抢占式多任务的,最好举个例子。
001:设置线程的优先级是为了调度,因为系统调度原子就是线程,那么设置进程的优先级的意义是什么呢?
CreateFile(_T("ReaeMe.txt"))