进程/线程
#
1: 每一个程序运行的时候,操作系统会给这个程序分配一个进程,以32位的操作系统为例:就会分配4GB的虚拟内存空间(代码段,数据段,栈,堆),将程序的代码加载到代码段,并运行程序,执行程序的指令;
2:什么是线程
(1)线程是基于进程的轻量级的调度单元,线程是在一个进程中创建出来的,当一个进程出来后,他本身就对应为一个线程。
(2)一个进程还可以创建多个线程,这些线程共享进程的代码段,堆,数据段,唯一不共用的是栈,每一个线程都会有自己独立的栈,这样每一个线程的函数调用与执行都是独立的互不影响;
(3)线程在执行过程中,随时有可能挂起调度出去,所以当两个线程在访问共同的资源的时候要特别注意数据的同步;
(4)数据段,代码段,堆上的数据各个线程可以共享访问;
创建线程
1: 创建一个线程;
HANDLEWINAPICreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes,
SIZE_TdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress,
LPVOIDlpParameter,
DWORDdwCreationFlags,
LPDWORDlpThreadId
);
函数说明:
第一个参数表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。
第二个参数表示线程栈空间大小。传入0表示使用默认大小(1MB)。
第三个参数表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。
第四个参数是传给线程函数的参数。
第五个参数指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。
第六个参数将返回线程的ID号,传入NULL表示不需要返回该线程ID号。
函数返回值: