resumethread,指针与句柄的区别

伏羲号

resumethread,指针与句柄的区别?

句柄是一个32位的整数,实际上是Windows在内存中维护的一个对象内存物理地址列表的整数索引。

resumethread,指针与句柄的区别

因为Windows的内存管理经常会将空闲对象的内存释放掉,当需要访问时再重新提交到物理内存,所以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。

程序将想访问的对象的句柄传递给系统,系统根据句柄检索自己维护的对象列表就能知道程序想访问的对象及物理地址了。

句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。

但是,Windos是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。

对象被移动意味着它的地址变化了。如果内存总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存地址,用来专门登记各应用对象在内存中的地址变化,而这个地址本身是不会变的。

Windows内存管理器移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。

这样我们只需要记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。

这个地址是在对象装载时由系统分配的,当系统卸载时又释放给系统。但是,必须注意的是,程序每次重新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄。

而且绝大多数情况下的确不一样。

假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的座位是一样的道理。

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。

Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。

所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它,如果要操作该段内存,对于GlobalAlloc创建的可移动的内存,需要配合使用GlobalLock、GlobalUnlock),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。

HDC 是设备描述表句柄CDC 是设备描述表类你使用CreateThead后函数会返回一个句柄,它代表这个线程。

你可能会调用SetThreadPriority去修改线程的优先级,使用ResumeThread去重新开始一个线程的运行,在调用这些函数时你都需要告诉系统你到底要操作哪个线程,而刚才返回的句柄派上用处了,这些函数的第一个参数就是线程的句柄。

线程和协程的区别?

进程、线程和协程是计算机中的三个重要的概念,它们在多任务处理的背景下有着各自不同的作用。

进程是操作系统中的基本概念,指的是在计算机中正在运行的一个程序,它是操作系统资源分配的最小单位。每个进程都有自己的独立内存空间,多个进程之间不能直接通信,只能通过操作系统提供的特定机制进行通信。进程是多任务处理的基础,它们可以同时运行多个任务,提高计算机的利用效率。

线程是进程中的一条执行路径,它可以利用同一进程中的资源,不同线程之间可以共享进程中的全局内存,线程数目是由操作系统调度算法决定的。线程之间的切换开销比进程之间的切换开销小,所以在某些场合中可以使用线程来提高程序的运行效率。

协程则是在单个线程内实现并行处理的一种机制,协程的调度与线程的调度不同,是由程序员自己进行操作。协程可以看做是一条线程中的多个执行路径,协程之间的切换约等于函数之间的调用过程,非常轻量级,因此它可以更有效地利用计算资源,大大提高程序的运行效率。

总之,进程、线程和协程是多任务处理中的三个重要概念,它们各自有各自的特点和使用场景,程序员需要根据实际需求进行选择和使用,以提高程序性能和运行效率。

怎么优雅的关闭线程?

有三种方法关闭线程:

1.设置退出标志,使线程正常退出,也就是当run()方法完成后线程终止。

2.使用interrupt()方法中断线程。

3.使用stop方法强行终止线程(不推荐使用,Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!)

CPU中已被终止的进程还能恢复吗?

一般情况下,CPU中已被终止的进程是无法恢复的。当进程被终止时,操作系统会将其占用的资源释放给其他进程使用,这些资源包括内存、文件句柄等。如果进程没有正确地释放这些资源,可能会导致系统崩溃或者出现其他问题。

但是,在某些特殊情况下,被终止的进程可能可以通过一些特殊的技术进行恢复。例如,在Windows系统中,可以使用“任务管理器”来查看被终止的进程的状态,并尝试恢复它们。此外,在一些特殊的应用程序中,也可能会有一些特殊的机制来处理被终止的进程,从而使它们能够恢复。

总之,被终止的进程能否恢复取决于具体情况。如果您遇到了这种情况,建议及时采取措施,以避免出现更严重的问题。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,97人围观)

还没有评论,来说两句吧...