1.创建: HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, DWORD cbStackSize, PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD dwCreateFlags, //是否立即调度,0是 PDWORD pdwThreadID); //线程id. NULL 即可 2.退出线程: _endthread()ExitThread(退出码) 强制结束线程 TerminateThread(句柄, 退出码) .调用函数退出不会清理内存和对象,最好是自动返回退出 3. 冻结与解冻线程: SuspendThread(句柄); ResumeThread(句柄); 返回挂起计数 4. 打开线程然后操作它: Open(打开干什么?, 继承方式FALSE, 线程id) 5. 线程切换: SwitchToThread() 6. 获取线程运行时间: BOOL GetThreadTimes( HANDLE hThread, 线程句柄 PFILETIME pftCreationTime, PFILETIME pftExitTime, PFILETIME pftKernelTime, PFILETIME pftUserTime); 7.线程上下文CONTEXT结构 8. 优先级 9.关联性 10.原子操作 InterlockedIncrement() 之类的函数, 实现线程安全,速度比互斥量,临界区等快, 最大承受64个线程 11.临界区 CRITICAL_SECTION cs; 删除临界区: DeleteCriticalSection(&cs); 进入临界区和退出临界区: EnterCriticalSection(&cs); LeaveCriticalSection(&cs); 必须初始化临界区: InitializeCriticalSection(&cs);临界区接受的线程最多64个 12 锁创建:SRWLOCK sl;初始化:InitializeSRWLock(&sl);获得锁: AcquireSRWLockExclusive(&sl); 写锁定释放锁: ReleaseSRWLockExclusive(&sl); 获得锁: AcquireSRWLockShared(&sl); 读锁定 13 等待单个线程: WaitForSingleObject(hd[i], INFINITE); 多个阻塞线程,等待线程: WaitForMultipleObjects(4, hd, 1, INFINITE); 参数: 线程个数,线程数组名, true, 等待时间,此为直到退出.返回值: WAIT_OBJECT_0:WAIT_TIMEOUT:WAIT_FAILED: 14 事件: 通过事件进行线程通信 创建事件. CreateEvent 设置事件: SetEvent(事件句柄) 触发 然后通过WaitForSingleObject函数进行等待,set后这个才不等待了ResetEvent()计时器 : CreateWaitableTimer() 创建失败返回NULl . LARGE_INTEGER 结构体类型. 成员QuadPart=-x0000000 x秒. 设置定时器SetWaitableTimer() 传入Timer和结构体. 然后调用waitfor… 那个函数 详解BOOL SetWaitableTimer( HANDLE hTimer, //定时器句柄 const LARGE_INTEGER *pDueTime, //第一次触发的时间后. LONG lPeriod, //触发后以什么频率触发 PTIMERAPCROUTINE pfnCompletionRoutine, //回调函数 PVOID pvArgToCompletionRoutine, //参数 BOOL bResume); //false 和SleepEx(INFINITE, TRUE) 配合. 使主线程休眠, 时间对象唤醒. 15信号量: 创建: CreateSemaphore(NULL, 0, MAX, id); 创建后没有可用的信号,需要释放.释放信号: ReleaseSemaphore(hsem, MAX, 0); .关闭信号量: CloseHandle(hsem);.等待信号量: WaitForSingleObject(mysem, INFINITE)==WAIT_OBJECT_0 17 互斥量 创建: CreateMutex(NULL, FALSE, NULL) 不自动释放 .最大承受线程数:64. 创建失败返回NULL释放: ReleaseMutex(mutex); 关闭: CloseHandle(mutex);