zoukankan      html  css  js  c++  java
  • 线程

    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);
  • 相关阅读:
    第三十三天 客户机和tcp多个客户端通信
    第三十二天黏包问题及解决方法:
    第三十一天 udp通信和黏包
    第三十天网路的基础
    第二十九天日志和config模块:
    Linux系统开机显示BusyBox v1.22.1 built-in shell(ash) 解决方法
    MTK迁移Oracle单库
    Ubuntu14.04安装mysql
    Ubuntu14.04下tomcat的安装
    Thinking in Java Chapter4 Exercise10 吸血鬼数字
  • 原文地址:https://www.cnblogs.com/freesec/p/6516873.html
Copyright © 2011-2022 走看看