概要:创建一个线程,主线程执行时,有另外一个线程也在运行
主要步骤:
1、创建一个线程
2、创建线程所要执行的函数
代码:
#include <iostream>
// 因为需要windows的API函数
#include<Windows.h>
DWORD WINAPI Fun1Pro(
__in LPVOID lpParameter
);
int main()
{
int index = 0;
// main 函数是主线程
//创建线程
HANDLE hThread1;
hThread1 = CreateThread(NULL,0,Fun1Pro,NULL,0,NULL);
// 关闭句柄 关闭句柄,但没有关闭创建的线程
// 只是关闭了主线程中此线程的句柄,是该线程的内核引用计数减1
CloseHandle(hThread1);
// 为防止子线程还未创建,主线程就退出可以添加 sleep() 让主线程暂停一小段时间
Sleep(1); // 暂停当前线程 单位毫秒
// 让主线程循环输出这句话
while (index < 10)
{
std::cout << "主线程正在运行 " << "\n";
index++;
}
return 0;
}
// 主线程与线程 1在单CPU 下为交替运行
DWORD WINAPI Fun1Pro(
LPVOID lpParameter
)
{
int index1 = 0;
// 线程 1 也循环输出这句话
while (index1 < 10)
{
std::cout << "线程1正在运行" << "\n";
index1++;
}
return 0;
}
运行结果图:
用到的主要函数:
1、创建线程函数:
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, // NULL S设置为缺省的安全性
__in SIZE_T dwStackSize, // 指定初始提交栈的大小 以字节为单位,系统会四舍五入近似为最近的一个页面,页面是系统管理内存时的一个内存单位 如果设为0,则使用默认值
__in LPTHREAD_START_ROUTINE lpStartAddress, // 指向所传参数类型定义的函数的指针,函数将被线程执行,表示线程的起始地址,作为线程的入口函数,函数的名字可以任取,但函数的定义必须遵照规定
__in_opt LPVOID lpParameter, // 指定单独的值传递给线程
__in DWORD dwCreationFlags, // 指定控制线程创建的附加条件 立即创建运行、创建后暂停运行、指定时间等
__out_opt LPDWORD lpThreadId // 指向线程标识符的变量【out】
);
如果创建成功,会返回一个线程的句柄