欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

创建一个简单的线程

程序员文章站 2022-06-11 18:10:38
...

通过一个简单的程序认识线程

#include<stdio.h>
#include<Windows.h>
#include<process.h>

unsigned _stdcall printa(void* pA)		//在函数线程里运行一个循环输出
{
	int i;
	for (i = 1; i <= 10000; i++)
	{
		printf("printf a:%d\n", i);
	}
	return 0;
}

/*unsigned printc()
{
	int i;
	for (i = 1; i <= 10000; i++)
	{
		printf("printf c:%d\n", i);
	}
	return 0;
}
*/

int main()
{
	int i;
	HANDLE hand;		//创建一个句柄
	unsigned handID;	
	hand = (HANDLE)_beginthreadex(NULL, 0, &printa, NULL, 0, &handID);
	/*通过_beginthreadex()函数创建一个线程 
	第一个NULL是线程的安全属性,NULL为默认安全属性;
	第二个参数0用来指定线程堆栈的大小,0表示线程堆栈大小和创建他的线程的相同,一般用0;
	&printa为线程函数的地址;
	&printa后面的NULL为函数的参数;
	第五个参数0是线程初始状态,0即立即运行;
	&handID是线程的标识ID,用于记录线程ID的地址
*/		
	//printc()
	for (i = 1; i <= 10000; i++)	//在主函数中运行一个循环输出
	{
		printf("printf b:%d\n", i);
	}
	CloseHandle(hand);
	return 0;
}

运行

将程序编译后用cmd运行并将结果导入txt文本
创建一个简单的线程

结果分析

打开生成的文本文件,可以发现,开始运行的是主函数里的printf b循环,这说明主程序要先于线程运行一段时间,线程才会启动
创建一个简单的线程
在线程启动后,线程循环printf a与主函数里的printf b循环交替进行创建一个简单的线程
在主函数的循环结束后,线程的循环还未结束,然而主函数继续运行,运行到关闭进程指令,线程中途终止创建一个简单的线程