14-线程使用

线程使用

线程的使用本质就是将一个函数作为内核传入,作为一个独立的分支与主线程同时执行。

核心代码:

unsigned WINAPI main_xh(void* arg)		//函数必须用unsigned WINAPI作为返回值才能作为指针传入
{ //函数参数必须是void*类型传入,再在内部变为实际约定的类型
int num = *((int*)arg);
for (int i = 0; i < num; i++)
{
printf("xh");
Sleep(3000);
}
return 1;
}

_beginthreadex(NULL, 0, &main_xh, (void*)&xh, 0, &xh_id);

完整代码

注:分支线程执行过程中,主线程不能被终止

#include<iostream>
#include<Windows.h>
#include<process.h>
#include<stdlib.h>
using namespace std;
unsigned WINAPI main_xh(void* arg)
{
int num = *((int*)arg);
for (int i = 0; i < num; i++)
{
printf("xh");
Sleep(3000);
}
return 1;
}

unsigned WINAPI main_xm(void* arg)
{
int num = *((int*)arg);
for (int i = 0; i < num; i++)
{
printf("xm");
Sleep(2000);
}
return 1;
}

unsigned WINAPI main_lw(void* arg)
{
int num = *((int*)arg);
for (int i = 0; i < num; i++)
{
printf("lw");
Sleep(5000);
}
return 1;
}


int main()
{
int xh = 20;
int xm = 30;
int lw = 50;
unsigned int xh_id,xm_id,lw_id;
_beginthreadex(NULL, 0, &main_xm, (void*)&xm, 0, &xm_id);
_beginthreadex(NULL, 0, &main_xh, (void*)&xh, 0, &xh_id);
_beginthreadex(NULL, 0, &main_lw, (void*)&lw, 0, &lw_id);
system("pause");
return 0;

}