线程的基本调用(MFC)

这篇博客介绍了进程和线程的概念,强调线程是操作系统调度的基本单位,同一进程中的线程共享资源但拥有独立的调用栈。在Windows系统中,通过CreateThread创建线程,使用TerminateThread和CloseHandle来终止和释放资源。文章还提供了一个示例,演示如何创建和管理线程,并提醒注意线程安全和内核对象的回收。
摘要由CSDN通过智能技术生成

1.进程:动态执行的过程,操作系统进行资源分配和调度的独立单位,时应用程序运行的载体。一个程序可以启动多个进程。

2.线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

3.线程和进程:

//1.进程类似于工厂是系统分配资源的基本单位,线程类似于工厂中的工人是CPU调度和执行的基本单位
//2.一个进程由一个或者多个线程组成。
//3.进程之间相互独立,但同一个进程下的线程之间是共享程序的内存空间(代码段,数据集,堆栈)
//4.线程上下文切换比进程上下文切换快的多

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符信号处理等等。但同一进程中的多个线程有各自的调用栈,自己的寄存器环境,自己的线程本地存储。

4.线程的创建和销毁(基于windows)

在windows系统中要调用线程函数要包含windows.h的头文件

//1:CreateThread()创建线程函数。返回的是线程的句柄

其一共有六个参数。参数1:安全描述符,一般为NULL。

参数2:线程栈的大小。参数3:线程函数的地址。参数4:线程函数的参数(要将传的参数转换为void *类型)。 参数5:线程的初始状态,可以设置为挂起或者创建即运行的状态。参数6:线程ID

//2:TerminateThread。杀死线程。参数为句柄

//3:CloseHandle。关闭句柄。参数几位要关闭的句柄

//4:WaitForSingleObject。等待指定对象的信号。参数1:信号的句柄。参数2:等待时间

返回值为WAIT_TIMEOUT等。具体可查文档

#include <iostream>
#include<windows.h>
using namespace std;
bool isout = true; //通过定义一个标志位来让线程结束
//线程函数
DWORD WINAPI threadpro1(LPVOID ip) //LPVOID 是void* 类型,可以强转成任意类型.
{
	int con = (int)ip;
	for (int k = 0; k < con; k++)
	{
		//Sleep(100);
		if (isout)   //判断标志位
			cout << "asd" <<k<< endl;
		else
			return 0;
		Sleep(100);
	}
	return 0;
}
int main111() 
{
	
	DWORD thread = 0;
	HANDLE handle = CreateThread(
		NULL/*安全描述符*/,0,threadpro1,(void *)100,CREATE_SUSPENDED,& thread);
		int i = 0;
	while(1) {
		//Sleep(1000); //以ms级别睡眠
		i++;
		cout << "睡了" << i << "秒" <<endl;
		if(i == 100) {
			break;
		}
	}
	cout << "睡醒了" << endl;
	isout = false;//退出线程  //结束所创建的线程
	if (WAIT_TIMEOUT == WaitForSingleObject(handle,100))//等待一段时间看线程是否退出。因为线程切换要有时间
	{
		TerminateThread(handle, -1);
		cout << "强制杀死" << endl;
	}
	if(handle)
	CloseHandle(handle);   //关闭句柄
	handle = NULL;
	cout << "结束线程" << endl;
	system("pause");
	return 0;
}

注意: 操作系统 会给每一个线程分配一个内核对象(用户和内核之间交互的接口),用计数器进行管理。
//回收内核对象:1.线程退出(一种是线程正常执行完。)(强制退出,但可能会造成执行错误,一般不建议terminatethread)2.关闭句柄(closehandle)才能将内核对象销毁,如果不将内核对象销毁就会造成内存泄露。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值