创建一个简单的线程
程序员文章站
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循环交替进行
在主函数的循环结束后,线程的循环还未结束,然而主函数继续运行,运行到关闭进程指令,线程中途终止