进程一

#include<stdio.h>
#include<windows.h>
int i = 1;

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    for(int i = 0; i < 1000; i++){
        Sleep(1000);
        printf("-------------------------
");
    }
    return 0;
}

void Test()
{
    HANDLE  p = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
    ::CloseHandle(p);
    
}
int main()
{
    Test();
    for(int i = 0; i < 1000; i++)
    {
        Sleep(1000);
        printf("++++++++++++++++++++++++
");
    }
    return 0;
}

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性 通常为NULL
SIZE_T dwStackSize, // 参数用于设定线程可以将多少地址空间用于它自己的堆栈
// 每个线程拥有它自己的堆栈
LPTHREAD_START_ROUTINE lpStartAddress, // 参数用于指明想要新线程执行的线程函数的地址
LPVOID lpParameter, // 线程函数的参数
// 在线程启动执行时将该参数传递给线程函数
// 既可以是数字,也可以是指向包含其他信息的一个数据结构的指针
DWORD dwCreationFlags, // 0 创建完毕立即调度 CREATE_SUSPENDED创建后挂起
LPDWORD lpThreadId // 线程ID
);
// 返回值:线程句柄

线程句柄与线程ID:

线程是由Windows内核负责创建与管理的,句柄相当于一个令牌,有了这个令牌就可以使用线程对象.

线程ID是身份证,唯一的,系统进行线程调度的时候要使用的.

创建线程代码:

//创建一个新的线程
HANDLE hThread = ::CreateThread(NULL, 0, ThreadProc,
NULL, 0, NULL);

//如果不在其他的地方引用它 关闭句柄
::CloseHandle(hThread);

线程函数:

DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data



向线程函数传递变量的两种方式:

(1) 全局变量

(2) 线程参数