首页 新闻 会员 周边 捐助

Windows核心编程中的思考

0
悬赏园豆:40 [已关闭问题] 关闭于 2014-06-03 18:38

******************************************************************************************************************************************
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:设置线程的优先级是为了调度,因为系统调度原子就是线程,那么设置进程的优先级的意义是什么呢?

Windows2014Windows的主页 Windows2014Windows | 菜鸟二级 | 园豆:226
提问于:2014-05-03 11:14
< >
分享
所有回答(1)
0

CreateFile(_T("ReaeMe.txt"))

Launcher | 园豆:45050 (高人七级) | 2014-05-04 15:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册