系统中,进程主要有两部分组成:进程内核对象和进程地址空间。操作系统通过进程内核对象来管理进程,进程地址空间用于维护进程所需的资源:如代码、全局变量、资源文件等。
那么线程也是有两部分组成:线程内核对象和线程堆栈。操作系统通过线程内核对象对线程进行管理,线程堆栈用于维护线程执行代码时需要的所有的函数参数和局部变量。
线程的开销远小于进程,所以在并发执行多个任务的时候,应该尽可能使用多线程 解决问题,而不是使用多进程解决问题。
创建线程
当exe程序启动的时候,操作系统会创建一个主线程,用于执行入口函数(main函数)。通过在主线程中调用对应的函数,可以创建更多的线程来执行任务。通过CreateThread函数可以创建一个线程。- HANDLE CreateThread(
- LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全描述符
- SIZE_T dwStackSize,// 初始堆栈大小,通常为 0,表示使用默认大小。
- LPTHREAD_START_ROUTINE lpStartAddress,//多线程要执行的函数指针
- __drv_aliasesMem LPVOID lpParameter,//传递给多线程的参数
- DWORD dwCreationFlags,// 线程创建标志,通常为0,表示立即执行。CREATE_SUSPENDED表示创建线程之后,不立即调度。
- LPDWORD lpThreadId //指向接收线程 ID 的变量的指针,通常为 NULL。
- );
复制代码 下面是同CreateThread创建多线程并执行一个函数的简单示例代码。
[code]#include #include // 线程函数DWORD WINAPI ThreadFunction(LPVOID lpParam){ while (true) { std::cout |