1 先来个C程序跑起来!
/*
每一个程序相当于一个进程,而一个进程之中可以有多个线程
*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<process.h> //进程函数
void run(void *p)
{
int *temp = (int *)p;
char ch[50];
sprintf(ch, "线程%d启动", *temp);
MessageBoxA(0, ch, "多线程", 0);
}
void main()
{
for (int i = 0; i < 5; i++)
{
//第一个参数为函数的地址,第二个参数为栈的大小,0代表默认大小,第三个参数为函数的实参,必须为void*类型
_beginthread(run, 0, &i); //多线程调用函数
Sleep(1000);
}
system("pause");
}
运行结果:开启五个线程!
2 阻塞式进程
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<process.h>
void changeCMDtitle(void *p)
{
int i = 1;
char str[20];
while (1)
{
Sleep(1000);
sprintf(str, "title 程序运行的第%d秒", i);
system(str);
i++;
}
}
void endMultiThread(void *p)
{
int *px = (int *)p; //指针转换
int i = 0;
while (1)
{
if (i > 5)
{
printf("%d\t%d\n", i, *px);
_endthread(); //结束线程,该程序执行完毕之后退出,如果是return的话,直接退出
}
Sleep(1000);
i++;
}
}
void main()
{
_beginthread(changeCMDtitle, 0, NULL);
for (int i = 0; i < 5; i++)
{
HANDLE hd = _beginthread(endMultiThread, 0, &i); //hd相当于线程编号
//没有等待的情况下为多线程,五个线程同时进行
WaitForSingleObject(hd, INFINITE); //等待模式,第二个参数代表无限期等待,for循环里边相当于单线程
Sleep(1000); //有Sleep的情况下每隔一秒endMultiThread函数相继关闭,否则,同时关闭
}
system("pause");
}
运行结果:WaitForSingleObject为阻塞式进程,当且仅当当前进程执行完毕之后才会进入下一进程,否则,无限等待。