线程基础

来源:互联网 发布:keba控制器编程手册 编辑:程序博客网 时间:2024/05/21 17:11
1、线程由两部分组成:
    1)、线程的内核对象,操作系统用它管理线程。系统还用内核对象来存放线程统计信息的地方。
    2)、一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量。
2、CreateThread函数是创建线程的Windows函数。不过,如果写的是C/C++代码,就绝对不要调用CreateThread。
    可以调用_beginthreadex函数。至于原因,后面再说。
3、线程创建
    HANDLE CreateThread(
    PSECURITY_ATTRIBUTES psa,//-------------------内核对象安全属性,一般为NULL
    DWORD cbStackSize,//--------------------------指定线程栈大小,传入0,则编译器设定
    PTHREAD_START_ROUTINE pfnStartAddr,//---------新线程执行的线程函数地址
    PVOID pvParam,//------------------------------传参给线程函数
    DWORD dwCreateFlags,//------------------------线程创建标志,是否立刻执行
    PDWORD pdwThreadID//--------------------------存储新线程id,可为NULL
    );
4、线程终止
    1)、线程函数返回:所有清理工作都被执行
    2)、ExitThread终止线程,并导致操作系统清理所使用的所有操作系统资源,但是C/C++类对象不会销毁。
    3)、TerminateThread函数是异步的,不能保证线程是否已经销毁。
5、使用CreateThread,如果线程使用了C/C++运行库的signal函数,则整处进程都会终止,因为结构化异常处理
    帧没有就绪。假如线程不是通过调用_endthreadex来终止的,数据块就不能被销毁,从而导致内存泄漏。
6、GetProcessTimes查询所在进程的使用时间。
7、GetCurrentThread返回的是伪句柄,DuplicateHandle函数可以把伪句柄变为真正的句柄

原创粉丝点击