挂起线程
线程挂起的个数由宏 MAXIMUM_SUSPEND_COUNT 决定。
线程挂起之后 就进入 阻塞态
线程可以连续多次挂起,既深层次挂起。挂起多少次就得恢复多少次。
注意:挂起当前线程时,如果存在堆操作,可能就会把堆锁死,其他线程就不能操作该堆。
DWORD WINAPI SuspendThread(
__in HANDLE hThread
);
挂起之后恢复
恢复后就进入 就绪态
DWORD WINAPI ResumeThread(
__in HANDLE hThread
);
线程睡眠
VOID WINAPI Sleep(
__in DWORD dwMilliseconds //毫秒
);
执行之后线程进入阻塞态,睡眠时间之后进入就绪态
dwMilliseconds 参数
0 : 放弃当前时间片进入就绪,把决定权交给操作系统
INFINITE : 永远进入阻塞状态
线程切换
BOOL WINAPI SwitchToThread(void);
该函数的功能是把自己当前的时间片放弃,交给操作系统处理优先级更低的线程
而 Sleep(0) 是处理同等优先级的线程
就绪态进入运行态,由操作系统调用决定
获取线程上下文(现场)
BOOL WINAPI GetThreadContext(
__in HANDLE hThread,
__in_out LPCONTEXT lpContext
);
typedef struct _CONTEXT {
...
} CONTEXT, *LPCONTEXT;
该结构体包含由处理器寄存器数据
获取线程现场