2021-03-07Win3200
请注意,本文编写于 632 天前,最后修改于 633 天前,其中某些信息可能已经过时。

目录


1. 什么是线程?

<1> 线程是附属在进程上的执行实体,是代码的执行流程。

<2> 一个进程可以包含多个线程,但一个进程至少要包含一个线程。

进程是一种空间上的概念,它代表的是4GB的虚拟内存,
线程是一种时间上的概念,也就是所线程就是当前正在运行的具体的代码

2. 创建线程

c
HANDLE CreateThread(
  	LPSECURITY_ATTRIBUTES lpThreadAttributes, 	// SD
  	SIZE_T dwStackSize,                       		// initial stack size
  	LPTHREAD_START_ROUTINE lpStartAddress,    	// thread function
  	LPVOID lpParameter,                       		// thread argument
  	DWORD dwCreationFlags,                    		// creation option
  	LPDWORD lpThreadId                        		// thread identifier
);

DWORD WINAPI ThreadProc(
  	LPVOID lpParameter   			// thread data
);
c
# include <stdio.h>
# include <Windows.h>
# include <stdlib.h>


DWORD WINAPI ThreadFunc(LPVOID LP);

int main()
{
	SECURITY_ATTRIBUTES sa = { sizeof(sa) };
	DWORD dwThreadId = 0;
	HANDLE hThread;
	hThread = CreateThread(&sa, 0, ThreadFunc, 0, 0, &dwThreadId);
	//printf("这里是主线程\r\n");
	while (true)
	{
		printf("1");
	}
	system("pause");
    return 0;
}

DWORD WINAPI ThreadFunc(LPVOID LP)
{
	//printf("这里是子线程\r\n");
	while (true)
	{
		printf("2");
	}
	return 0;
}

关闭线程

  1. 线程内核对象计数器变成0,就是所有打开线程的地方全部都CloseHandle
  2. 线程的执行代码已经执行完毕

3. 向线程函数传递变量

<1> 线程参数。

<2> 全局变量。

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!