Windows线程启动到消亡的运行状态

来源:互联网 发布:汽修管理系统源码 编辑:程序博客网 时间:2024/05/29 02:43

线程在被创建出来后会经历,启动->运行->挂起->休眠->消亡几个状态。启动和消亡在以前的帖子里都已经讲烂了,在这里主要说下运行,挂起,还有休眠的状态。


运行:CPU的抢栈式的运行方式,导致了线程在运行过程中会来回切换。这样就会不停的读取CONTEXT,大致流程是:保存CONTEXT->切换线程执行->切换回来->读取CONTEXT。注意了,这里用了个词叫切换,其实不然,运行过程中线程也是处于一种挂起状态,只是这种挂起状态和接下来要说的线程挂起状态有所不同,为了达到区分的目的。这里跟换了用词,切换。


挂起:SuspendThread(HANDLE)挂起线程,ResumeThread(HANDLE)结束挂起。这里可以调用这两个API来实现线程的挂起,传递的参数都是要挂起的线程句柄。

挂起->其实就是对线程里的暂停计算+1,退出挂起的时候,将暂停计数-1.,当暂停计数不为0的时候,线程是不会继续运行的,所以,一切都卡住了。

强调下:这里和运行中的挂起有什么区别了。运行中的挂起不会对暂停计数有操作,强调。。。。不会对暂停计数有操作。


休眠:休眠其实就是我们的Sleep(time),休眠状态代表着在休眠的这段时间里,我的线程停止运作,不会被调用。

注意Sleep(0)这个用法,这个用法表示的意思是将线程时间片给别人运作,线程虽然休眠的时间没有,但是CONTEXT依然会被重新装载一次。