线程状态:
- 运行态
- 就绪态
- 阻塞态
多线程:
- 主线程处理界面,消息循环
- 创建子线程去执行非界面非消息循环,特别是一些耗时的任务
- 相关API
- 创建线程 CreateThread
- 退出线程 ExitThread
- 挂起线程 SuspenedTread
- 恢复线程 ResumeThread
- 终止线程 TerminateThread
- 获取当前进程句柄 GetCurrentThread
- 获取线程退出码 GetExitCodeThread
-等待内核对象触发 WaitForSingleObject();
GetCurrentThread 伪句柄 “-2” 0xFFFFFFFe
GetCurrentProcess进程的伪句柄 “-1” 0xFFFFFFFF
"function retrieves a pseudo handle for the current process."
挂起线程 SuspenedTread 引用计数
恢复线程 ResumeThread
ps:线程挂起一次然后恢复一次,程序会跳过WaitForSingleObject 实验
通过PID 可以获取线程句柄 OpenThread
int main()
{
Handle hThread = CreateThread()
//等待事件发生
WaitForSingleObject(hThread);
GetExitCodeThread()//即return 的值,线程是函数,有返回值
CloseHandle(hThread);//内核对象采用引用计数,每次引用加1
/*
内核状态有状态属性:触发态,非触发态
线程结束的时候有个信号,msdn中为signaled state
等待某个对象有信号
*/
}
一个线程正常退出,系统会做一些列操作
- 引用计数会-1
- 线程内核对象状态变为已通知
- 给出退出码
ExitThread() <—-> DLL_Main Attach Detach
线程之间的通讯
全局变量
发消息
一般工作线程没有消息队列,一般用于工作线程向主线程发送消息
如果工作线程也有界面,那么工作线程也有消息队列
事件对象