MFC与win32多线程创建对比

深入浅出Win32多线程设计之MFC的多线程-线程与消息队列 3.线程与消息队列  在WIN32中,每一个线程都对应着一个消息队列。由于一个线程可以产生数个窗口,所以并不是每个窗口都对应着一个消息队列。下列几句话应该作为"定理"被记住:  "定理" 一  所有产生给某个窗口的消息,都先由创建这个窗口的线程处理;  "定理" 二  Windows屏幕上的每一个控件都是一个窗口,有对应的窗口函数。  消息的发送通常有两种方式,一是SendMe 阅读详情

 前段时间课设,做了个多线程的项目,现在时间宽裕了一些,回来总结一下在这个过程中遇到的一些难点。

 其实,一开始打算就打算做MFC的多线程程序,但却是学着Win32入的多线程的门,所以算是遇到了一个岔路,后来就跌跌撞撞就把两种创建线程的方法和相关的信号量和互斥量都弄了一下,在此总结一下。

 如果有错请大家指正。

转载请注明:http://blog.youkuaiyun.com/code_while/article/details/79111469

 其实MFC封装后的WIN32,但二者在使用时还是有一点点差异的。

一、 在WIN32中,创建线程的方法是CreateThread函数方法,返回值是HANDLE句柄,对应的函数类型的创建方法为DWORD WINAPI 你的函数名(LPVOID lp);然而,在MFC中却不可以直接用CreateThread方法,因为CreateThread是Windows自带的API函数,可以直截了当的创建一个新的线程,但在MFC中创建线程时,需要考虑到MFC中的初始化工作,否则创建的线程是不安全的,极度不容易控制的,所以应该使用封装了CreateThread方法的AfxBeginThread函数方法,他会创建一个CWinThread对象,然后它将自行调用CWinThread::CreateThread方法对该CWinThread对象进行初始化操作,从而完成了MFC中线程的创建,对应的线程函数类型的创建方法为UINT 你的函数名(LPVOID lp)。

 对比一下:

 

 WIN32MFC
线程创建函数类型DWORD WINAPI 你的函数名(LPVOID lp)UINT 你的函数名(LPVOID lp)
线程创建HANDLE my_thread=CreateThread(线程函数名,参数名,0,0,0,NULL)CWinThread *my_thread=new CWinThread
my_thread=AfxBeginThread(线程名,参数,0,0,0,NULL)
线程挂起SuspendThread(my_thread)my_thread->SuspendThread()
线程唤醒ResumeThread(my_thread)my_thread->ResumeThread()
线程终止TerminateThread(my_thread,0)
CloseHandle(my_thread)
TerminateThread(my_thread->m_thread,0)

二、MFC中的互斥量和信号量其实都封装的WIN32中的互斥量和信号量,可简单对比如下:

互斥量WIN32MFC
创建互斥量HANDLE CreateMutex(安全属性,最初状态,互斥量名字)CMutex my_cmutex(FALSE,NULL)
互斥量加锁WaitForSingleObject(HANDLE h_mutex,时间)my_cmutex.Lock()
互斥量解锁ReleaseMutex(HANDLE h_mutex)my_cmutex.Unlock()
信号量WIN32MFC
创建信号量HANDLE CreateSemaphore(安全属性,初始值,最大值,信号量名字)CSemaphore*my_csemaphore
信号量+1WaitForSingleObject(HANDLE h_semaphore,时间)my_csemaphore->Lock()
信号量-1ReleaseSemaphore(HANDLE h_semaphore)my_csemaphore->Unlock()

VC++与Windows开发核心:从Win32 API到MFC框架的深度实践 Windows平台开发的核心在于理解其底层运行机制与消息驱动架构。通过掌握Win32 API,开发者能够深入操作系统层面,实现对窗口、消息循环和图形设备接口(GDI)的精细控制。这种底层能力为构建高性能、高稳定性的桌面应用程序提供了坚实基础,尤其在工业控制、图形处理和系统工具等场景中价值显著。MFC框架在此基础上,通过面向对象封装和文档/视图架构,大幅提升了开发效率,同时保持了与底层API的无缝衔接。无论是处理VC++运行库依赖,还是进行GDI+绘图与多线程编程,对Windows核心原理的深刻理解都是解决实 阅读详情

相关推荐

VC中CWinThread类以及和createthread API的区别分析

主要介绍了VC中CWinThread类以及和createthread API的区别分析,较为详细的讲述了CWinThread类的原理,并以实例形式对AfxBeginThread函数的内部实现进行了解释说明,需要的朋友可以参考下

Win32、MFC多线程小结

1. 使用Win32SDK实现多线程1.创建线程//Win32MultiThread_Li5.1.cpp : 定义控制台应用程序的入口点。//例5.1一个简单的线程函数定义及线程创建的例子:使用CreateThread()// Win32MultiThread_Li5.1.cpp : 定义控制台应用程序的入口点。 //例5.1一个简单的线程函数定义及线程创建的例子:使用CreateThread()...

m0_37357063的博客 1460

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

CWinThread的使用方法

CWinThread的使用方法<br />技术资料2011-01-12 16:44:52阅读215评论0  字号:大中小 订阅<br />CWinThread类成员<br /><br />数据成员 m_bAutoDelete 指定线程结束时是否要销毁对象   <br />m_hThread 当前线程的句柄   <br />m_nThreadID 当前线程的ID   <br />m_pMainWnd 保存指向应用程序的主窗口的指针   <br />m_pActiveWnd 指向容器应用程序的主窗口,当一个OL

xs813的专栏 2348

大疆无人机地理视频制作全流程:从SRT文件到GIS叠加(附实战避坑指南)

本文详细解析了大疆无人机地理视频制作全流程,从解析SRT文件中的位姿数据,到在GIS软件中构建地理视频工程并生成可分发的文件。文章重点介绍了地理视频的核心概念、数据处理实战技巧,并探讨了其在应急响应、工程巡检等场景的高级应用与精度边界,为GIS工程师和无人机爱好者提供了一份实用的避坑指南。

river的博客 468

腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟

番茄钟是一种简单的时间管理方法。这个方法很简单:你专注工作25分钟,然后休息5分钟。这样可以让你更专心,不容易分心,还能防止过度疲劳。 很多人用番茄钟来提高工作效率,因为它能帮助你更好地管理时间。不过,市面上的一些免费番茄钟应用常常会有广告弹出来,影响使用体验。这就是为什么我们要开发一个没有广告的番茄钟小程序,让用户可以专心工作,不被打扰。

2201_75366661的博客 1690

CWinThread类用法详解+实例

转自:CWinThread类用法详解+实例_C的技术博客_51CTO博客

wwq222的专栏 1130

C#实战:手把手教你用SerialPort实现RS485 ModbusRTU通信(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现RS485 ModbusRTU通信,包括硬件准备、串口配置、数据收发核心逻辑及高级通信技巧。通过实战案例和完整代码,帮助开发者快速掌握工业级通信框架的构建方法,提升设备间通信的稳定性和效率。

weixin_29207533的博客 258

MFC多线程的使用(CWinThread类)

1、首先在对话框.h文件(对话框类内)中声明变量 //多线程 CWinThread* m_ThreadXXX; //控制线程事件句柄(选择性使用) HANDLE m_hControlThreadEnvent 2、声明及定义线程函数 可以声明在类内,也可以在内外,区别在于类内必须静态。优先选择类内,因为后续可以访问私有变量。 声明: static UINT ThreadFuncXXX(LPVOID lPream); 定义: UINT CXXXDlg::ThreadFuncXXX(LPVOID lpPara

weixin_45402675的博客 2497

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3230

大学生作业:80C51存储器数据传输实验:基本指令和数据传送

大学生作业:80C51存储器数据传输实验,报价 200 文章目录实验一、80C51存储器数据传输实验实验目的:实验内容一:基本指令实验内容二:数据传送 实验一、80C51存储器数据传输实验 实验目的: 熟悉软件的集成开发环境 掌握单片机软件设计流程,掌握存储器结构及各窗口之间的联系 掌握内部数据存储器、外部数据存储器的数据传送特点和应用; 实验内容一:基本指令 用三种方法实现将累加器A内容改为20H ORG 0000H LJMP MAIN ORG 0030H MAIN: ;方法一使用寄

weixin_54707168的博客 5115

win32线程退出C语言,多线程在C、Win32和MFC下的使用方法

下载源代码一.前言线程是执行路径。一个进程至少要有一个线程,也可能包含多个线程。若进程关闭了,则在进程中所有的线程也自动被销毁。当我们在一个应用程序中创建一个线程时,实际上,它是第二个线程。在C或C++中,程序的入口函数是main或wmain(Unicode版本)。在windows的运用程序中,程序的入口点是WinMain或wWinMain。当程序启动时,操作系统创建第一个线程。因此,window...

weixin_35637837的博客 583

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1054

多线程编程10例

进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

1164

Nacos 从困惑到蒙圈(10)Nacos 适配 人大金仓数据库【最新版】

介绍Nacos适配人大金仓数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1423

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

windows下的多线程

线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上...

weixin_30685047的博客 144

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Simple Multithreaded Application in pure C, Win32 and MFC

Download demo project in C - 3 Kb Download demo project in Win32 - 9 Kb Download demo project in MFC - 17 kbIntroductionA thread is a path of execution. A process requires at l

1515

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MFC 框架技术简单研讨

引用:http://www.cnblogs.com/chinazhangjie/archive/2011/09/20/2181986.html 正文: 第一讲 Win32 App  和  MFC Framework Win32 App 程序生与死:(1)注册窗口(2)创建窗口(3)显示并更新窗口(4)消息循环( WM_QUIT 结束循环)(5)退出 实例代码: #include ...

weixin_34124939的博客 86

Windows平台下的多线程编程

转自:点击打开链接 Win32 API是Windows操作系统内核与应用程序之间的界面,它将内核提供的功能进行函数包装,应用程序通过调用相关函数而获得相应的系统功能。为了向应用程序提供多线程功能,Win32 API函数集中提供了一些处理多线程程序的函数集。直接用Win32 API进行程序设计具有很多优点: 基于Win32的应用程序执行代码小,运行效率高,但是它要求程序员编写的

MessCodes 1326

多线程在C、Win32和MFC下的使用方法

原文地址:http://www.vckbase.com/document/viewdoc/?id=1978 一.前言     线程是执行路径。一个进程至少要有一个线程,也可能包含多个线程。若进程关闭了,则在进程中所有的线程也自动被销毁。当我们在一个应用程序中创建一个线程时,实际上,它是第二个线程。在C或C++中,程序的入口函数是main或wmain(Unicode版本)。在windows的运用

tinyhell127的专栏 1229

Win32多线程基础之线程创建

1.Windows线程库 Windows线程库主要有三种WIN32 API、MFC和.NET Framwork WIN32 API是操作系统内核提供的多线程接口。优点是执行代价小,效率高,缺点是要求程序员对Windows操作系统有一定了解。 MFC是微软公司对WIN32 API进行一定的封装之后提供的对用户更友好的类库。 2.WIN32 API线程创建——CreateThread方式 直接请看程序 // 4.1.1.cpp: 定义控制台应用程序的入口点。 #include "stdafx.h" #inc

qq_41026895的博客 709

MFC多线程各种线程用法

一、问题的提出    编写一个耗时的单线程程序:      新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为 IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:     void CSingleThreadDlg::OnSleepSixSecond()     {    Sl...

徐丨若木 2万+

MFC多线程学习

MFC多线程学习 一、问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为 IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时 6秒 } 编译并运行应用程序,单击“延时6秒”按钮,你就会发现

weixin_43341380的博客 1366

c++多线程编程与MFC多线程编程

转载来自:http://www.oschina.net/question/565065_72661 (一)有关多线程的WIN32 API函数 1、HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,                 DWORD dwStackSize,  LPTHREAD_START_ROU

songyimin1208的博客 3398

VC++ 多线程编程,win32,MFC 例子(转)

一、问题的提出 编写一个耗时的单线程程序:   新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); /...

心情第一 353
上一篇: MFC int 和CString的相互转化实例
下一篇: 高性能计算汇总-Mpi,openMpi,tbb,CUDA,OpenCL等并行计算或cpu,gpu混合计算技术
CCCAAAAFFFFF
博客等级 码龄10年 5粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值