20170618Windows10_03_线程复习

复习

1:内核对象:内核对象是是可以访问以及操作的吗?内核对象是用来做什么的?我们现在解除了哪些内核对象?

    进程,线程有内核对象,文件和设备都有内核对象,内核对象都是用于操作系统来管理的,每一个内核对象里面都会有一个使用计数,HANDLE里面有使用计数。

2:文件也是属于设备,电脑中任何IO设备,IO设备包含了文件,串口,网络等。

3:进程与进程之间是独立的,父进程和子进程之间也是独立的,他们的内存也是独立的。因此,父进程并不能访问子进程的内存,因为两者是独立的。进程是惰性的,线程是积极的,他会主动地去运行,线程与线程之间是独立的(指的是他们的栈是独立的,数据是独立的),但是线程和进程是不独立的,线程需要运行进程空间的代码,进程需要线程来运行代码,两者缺一不可,缺了任何一个,两者都会消亡。

    eg:所有的线程会在进程结束时消亡,因为已经没有了相关代码,线程没有存在的意义,进程在没有任何一个线程运行时,会消亡,因为他的空间已经没有意义了。正确的设计就是要让进程没有任何一个线程运行时消亡,线程应该是自然结束的。如果我们的线程非自然消亡,就不会调用CloseHandle来减少使用计数,会导致内核对象的泄漏,但是如果是某一个线程被强行关闭,进程还存在时,可能会导致内存泄漏。我们不应该做强制关闭任何一个线程。编程的时候,如果我们需求强制关闭某一个线程(线程没有按预期进行了,进入死循环……)。

4:在线程自然退出的时候会做一下几件事情:

    1:调用里面使用过的对象的对象的析构函数。

5:如果一定要强制关闭一个线程,不能确保其正常关闭,我们可以尽量在这个线程中使用主线程的对象,生命周期由主线程管理。

解决问题:

1:学了很多API,有什么用:
    API是用来解决问题的,有了需求,API才有意义,对于文件管理系统,CreateFile等是有意义的,CreateProcess等是意义不大的。我们要学习的不是API,而是这个事情/问题应该用哪些API来解决,用了这些API,电脑会发生哪些变化。
2:进程启动的时候,CreateProcess和ShellExecuteEx都能够启动进程,两者有很大的区别:
    前者启动的进程是当前进程的子进程,启动后的使用计数为2,一定要记得CloseHandle();。
    ShellExecuteEx是直接告诉资源管理器来启动进程,是Shell启动的进程只有Shell启动的进程才能够进行提权的操作,一个没有管理员权限的进程启动的进程是没有管理员权限的,必须用ShellExecuteEx来启动程序才可能提权。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值