main -> 主线程
每个线程都有自己的ID 每个线程都有自己的栈内存 同一个进程使用相同的地址空间
线程的调度
操作系统将CPU的执行时间划分为时间片,依次根据时间片不同执行不同的线程
创建线程(_beginthreadex()???)
HANDLE CreateThread( //创建成功,返回线程句柄 LPSECURITY_ATTRIBUTES lpThreadAttributes, //指向线程安全属性的指针(已经废弃) DWORD dwStackSize, //初始线程堆栈大小,以字节为单位(以兆来对齐) LPTHREAD_START_ROUTINE lpStartAddress, //指向线程函数的指针 LPVOID lpParameter, //传给线程处理函数参数 DWORD dwCreationFlags, //创建方式(立刻执行0或者挂起执行CREATE_SUSPENDED) LPDWORD lpThreadId //指向返回的线程ID ); //定义线程处理函数 DWORD WINAPI/CALLAPI ThreadProc( LPVOID lpPrameter //创建线程的时候传递的参数 )
挂起线程
DWORD SuspendThread(HANDLE hThread);
唤醒线程
DWORD ResumeThread(HANDLE hThread);
结束指定线程
BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )
结束函数所在的线程
VOID ExitThread(DWORD dwExitCode);
获取当前线程的ID
GetCurrentThreadId(); //获取该函数执行时候在的线程的ID
获取当前线程句柄
GetCurrentThread()
线程结束就是有信号
等候单个句柄有信号(目前只有线程的句柄为等候句柄,窗口句柄都不是)
//等候句柄表示的式 状态分为 有信号和无信号两种的句柄 DWORD WaitForSingleObject( //阻塞函数,一直等到有信号才返回, HANDLE handle, DWORD dwMilliseconds //INFINITE 一直等 );
同时等候多个句柄有信号
DWORD WaitForMutipleObjects( DWORD nCount, //句柄的数量 CONST HANDLE *lpHandles, //句柄的地址 句柄数组指针 BOOL bWait, //等候的方式 TRUE 所有的句柄都有信号,才返回;FALSE:只有一个有信号就返回 DWORD dwMilliseconds //等候的时间 )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步