创建线程

1、什么是线程?
线程是附属在进程上多执行实体,是代码的执行流程
 
进程是一种空间上的概念,代表的是虚拟4G虚拟内存
线程是一种时间上的概念,当前正在运行的具体代码
 
代码执行的时候是需要寄存器的,一个cpu只有一套寄存器 所以,单核CPU不存在真正多线程的,在某一个时间点上都只能有一段代码在执行
单核cpu上的多线程是分时段的
 
2、创建线程
#include <stdio.h>
#include <Windows.h>

int n = 5;
void ThreadProc(LPVOID lpParameter){

	int* n = (int*)lpParameter;
	for (int i = 0; i < *n; i++)
	{
		Sleep(500);
		printf(">>>>>>>>>%d\n",i);
	}
};
int main(){
	//创建线程
   /**
    1.安全描述符
    2.创建线程初始堆栈
    3.当前线程执行代码
    4.创建线程需要的参数 (void *)
    5.创建线程的标识 如果设置挂起则需要另外一个 ResumeThread 激活该线程
    6.返回创建的线程句柄
   **/   
	HANDLE hand = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,&n,0,NULL);
    
	CloseHandle(hand);
	
	for (int i = 0; i < 100; i++)
	{
		Sleep(500);
		printf("======%d\n",i);
	}
	getchar();
	return 0;
}
QQ20190220-193048@2x.png
 
还有需要注意的是CloseHandle 并不是真正关闭内核对象,只是把内核对象计数器减一
普通的内核对象每次打开会有一个计数器,每次关闭计数器会减一,当计数器为0的时候,系统把内核对象清理掉,但是有一个内核对象是例外,这个内核对象就是线程
 
线程被清理的两个必要条件
1、线程内核对象计数器清0
2、线程代码执行完毕
创建线程直接CloseHandle()并不会真正关闭线程,只有等到当前线程执行结束才会关闭

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《创建线程

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)