MFC线程-AfxBeginThread使用方法

前言

AfxBeginThread 是 MFC(Microsoft Foundation Classes,微软基础类库)中用于创建一个新线程的函数。它返回一个指向 CWinThread 类对象的指针,通过这个指针可以对创建出来的线程进行后续的操作和控制。

CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,DWORD dwCreateFlags = 0,LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

参数说明

该函数接收一个 LPVOID 类型(也就是 void* 类型,可用于传递任意类型的指针)的参数,这个参数就是在调用 AfxBeginThread 时通过 pParam 参数传递进来的值,函数返回一个 UINT 值,一般可以根据线程执行的结果返回相应的状态码等信息。例如,返回 0 表示线程正常结束,返回其他非零值可以表示不同的结束状态(具体含义由程序员自行定义)。

pfnThreadProc 参数:类型为 AFX_THREADPROC,这是一个函数指针类型。它指向的函数就是新线程要执行的线程函数。线程函数的定义形式通常类似如下:

UINT MyThreadProc(LPVOID pParam);

pParam 参数:类型为 LPVOID,它是传递给线程函数(也就是 pfnThreadProc 所指向的函数)的参数。你可以将需要在线程内部使用的数据的指针通过这个参数传递进去,比如传递一个结构体指针,该结构体中包含了线程执行任务所需要的各种配置信息等。

nPriority 参数:类型为 int,默认值是 THREAD_PRIORITY_NORMAL。用于设置新创建线程的优先级。线程优先级决定了线程在系统中获取 CPU 时间片的相对机会,取值可以是一些预定义的常量,例如:
THREAD_PRIORITY_HIGHEST:最高优先级,线程有较高的机会获取 CPU 时间片来执行。
THREAD_PRIORITY_ABOVE_NORMAL:高于正常优先级,能比正常优先级的线程更优先获取到 CPU 资源。
THREAD_PRIORITY_NORMAL:正常优先级,系统按照常规的调度策略分配 CPU 时间片。
THREAD_PRIORITY_BELOW_NORMAL:低于正常优先级。
THREAD_PRIORITY_LOWEST:表示最低优先级,线程相对较难获取到 CPU 时间片,执行机会相对较少。
 
nStackSize 参数:类型为 UINT,默认值是 0。它指定了新线程的栈空间大小(以字节为单位)。如果设置为 0,系统会使用默认的栈大小来为线程分配栈空间。通常情况下,默认值就可以满足大多数需求,但在一些特殊场景下,比如线程中可能会有很深的函数调用层次或者大量的局部变量等情况,可能需要手动指定一个较大的栈空间大小。
dwCreateFlags 参数:类型为 DWORD,默认值是 0。用于指定线程的创建标志,常见的取值有:
CREATE_SUSPENDED:如果设置了这个标志,线程创建后会处于挂起状态,需要通过调用 CWinThread 对象的 ResumeThread 方法来启动线程,使其开始执行。
0:表示线程创建后立即开始执行。
lpSecurityAttrs 参数:类型为 LPSECURITY_ATTRIBUTES,默认值是 NULL。它用于设置线程的安全属性,比如指定线程的安全描述符等信息。在大多数普通应用场景中,传递 NULL 即可,使用系统默认的安全设置。

案例:

新建一个基于对话框的窗体,添加一个button控件(IDC_BUTTON_Thread1)和Edit控件(IDC_EDIT_ThreadParm1)。为Edit控件添加一个变量m_thread1Pam;

头文件:

	CString m_thread1Pam;int num = 0;afx_msg void OnBnClickedButtonThread1();//千万要注意线程函数是静态类函数成员static UINT _cdecl pfnThreadProc(LPVOID lpararm);

CPP文件:

void CMFCThreadDlg::OnBnClickedButtonThread1()
{// TODO: 在此添加控件通知处理程序代码GetDlgItem(IDC_EDIT_ThreadParm1)->GetWindowText(m_thread1Pam);num=_ttoi(m_thread1Pam);GetDlgItem(IDC_EDIT_ThreadParm1)->SetWindowText(TEXT(""));CWinThread* pThread = AfxBeginThread(pfnThreadProc, this);if (pThread != NULL){// 获取线程句柄,用于WaitForSingleObject函数HANDLE hThread = pThread->m_hThread;// 等待线程结束,获取线程的返回值DWORD waitResult = WaitForSingleObject(hThread, INFINITE);if (waitResult == WAIT_OBJECT_0){AfxMessageBox(TEXT("线程正常退出"));}}else{AfxMessageBox(TEXT("线程创建失败"));}
}//注意函数成员需要添加类CMFCThreadDlg::类头,不然会报LNK2019错误
UINT _cdecl CMFCThreadDlg::pfnThreadProc(LPVOID pParam)
{CMFCThreadDlg* p = (CMFCThreadDlg*)pParam;int a = p->num;CString str;str.Format(_T("输入数据:%d \n"), a);TRACE(str);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之树与二叉树

华子目录 1.树和二叉树的定义1.1树的定义1.2树的基本术语1.3线性结构和树结构1.4二叉树的定义 2.二叉树的性质和存储结构2.1二叉树的性质2.2二叉树的存储结构2.2.1顺序存储2.2.2链式存储 2.3遍历二叉树2.4大作业:二叉树的基本操作2.4.1代码思路(仅供参考…

MYSQL——多表设计以及数据库中三种关系模型

大致介绍数据库中三种关系模型 一对多(1:N) 定义: 一个实体可以与另一个实体的多个实例相关联,而后者只能与前者的一个实例相关联。 例子: 学生和课程的关系。 学生(1):每个学生…

企业网页设计的安全与数据保护

企业网页设计不仅要考虑美观和功能性,安全与数据保护也是重中之重。在这个信息爆炸的时代,用户的数据隐私和安全问题日益凸显,企业必须采取多种措施来保障用户的信息安全。 首先,**SSL加密**是基础中的基础。通过使用SSL证书&…

观察者模式和订阅模式

观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…

工具学习_Docker

0. Docker 简介 Docker 是一个开源平台,旨在帮助开发者构建、运行和交付应用程序。它通过容器化技术将应用程序及其所有依赖项打包在一个标准化的单元(即容器)中,使得应用程序在任何环境中都能保持一致的运行效果。Docker 提供了…

基础知识学习上

基础知识学习上 1.关于print1.1 format 方法 2.运算符2.1 除法运算2.2 幂运算 3.条件控制语句3.1 if语句3.2 循环语句 4.复杂数据类型4.1列表4.2字典4.3字符串 5.函数 1.关于print 分隔符 print(1, 2, 3, 4, sep-) print(1, 2, 3, 4, sep。)结尾符 print(1, 2, 3, 4, end?) pr…

无监督跨域目标检测的语义一致性知识转移

Semantic consistency knowledge transfer for unsupervised cross domain object detection 无监督跨域目标检测的语义一致性知识转移 作者: Zichong Chen, Ziying Xia, Xiaochen Li, Junhao Shi, Nyima Tashi, Jian Cheng 所属机构: 电子科技大学信息与通信工程学院&…

AI智能稿件排版系统订单管理系统

在现代制造业和服务行业中,高效的生产流程和精确的订单管理是企业保持竞争优势的核心要素。AI智能稿件排版系统和订单管理系统作为一体化解决方案,以其强大的自动化能力和智能化技术,帮助企业实现排版效率提升、数据格式兼容性增强和生产流程…

Android Google登录接入

官方文献: 1、前期准备: https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发: 新版 Googl…

论文浅尝 | MindMap:知识图谱提示激发大型语言模型中的思维图(ACL2024)

笔记整理:和东顺,天津大学硕士,研究方向为软件缺陷分析 论文链接:https://aclanthology.org/2024.acl-long.558/ 发表会议:ACL 2024 1. 动机 虽然大语言模型(LLMs)已经在自然语言理解和生成任务…

Spring Cloud Data Flow快速入门Demo

1.什么是Spring Cloud Data Flow? Spring Cloud Data Flow 是一个用于构建和编排数据处理流水线的云原生框架。它提供了一种简化的方式来定义、部署和管理数据处理任务和流应用程序。以下是一些关键特性和组件: 关键特性 流处理: 支持实时数…

C# .NET环境下调用ONNX格式YOLOV8模型问题总结

我的环境是: Visual Studio: 2019 显卡: 一、遇到问题 1、EntryPointNotFoundException:无法在DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点。差了下原因,入口点是启动项中的问题。 原因:之前用yolov7时安装的版本在C…

量子感知机

神经网络类似于人类大脑,是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题,是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…

AI Large Language Model

AI 的 Large Language model LLM , 大语言模型: 是AI的模型,专门设计用来处理自然语言相关任务。它们通过深度学习和庞大的训练数据集,在理解和生成自然语言文本方面表现出色。常见的 LLM 包括 OpenAI 的 GPT 系列、Google 的 PaLM 和 Meta…

运维团队3D可视化智能机房管理方案

随着信息技术的飞速发展,机房作为信息技术基础设施的核心部分,其管理效率与可视化程度对运维团队的工作质量有着直接影响。本文将介绍一种结合3D可视化技术的机房管理方案,为运维团队提供一种新的视角和工具,以提升机房管理的效率…

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…

111 - Lecture 10

File I/O and GUI with JavaFX 文件输入/输出与JavaFX图形用户界面 一、Overview 1. File I/O (1) learning Java File I/O mechanism (2) writing into and reading from a file 使用文件I/O进行数据读取和…

分享一下arr的意义(c基础)(必看)(牢记)

arr 即数组名 一般指数组首元素地址 在两种情况下不是 1:sizeof(arr) arr指整个数组简单讲解一下strlen与sizeof(c基础)_strzeof在c语言中什么意思-CSDN博客 2:printf("%p",&…

大数据基于Spring Boot的化妆品推荐系统的设计与实现

摘 要 随着大数据时代的到来,人们对于个性化服务的需求越来越高。化妆品推荐系统作为一个认知智能模型段,在为消费者提供更好的购物体验方面发挥了重要作用。本研究基于大数据技术设计了一个高效准确的化妆品推荐系统。通过对海量数据的分析和处理&…