记一次进程线程dll和MFC消息循环的系列问题

深入探讨MFC消息循环和消息泵 深入探讨MFC消息循环和消息泵 首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessag 阅读详情

主要问题

1、主线程中慎用waitforsingleobject。本次问题出现在当进程B中弹出一个dlg并设置进程A为其父窗口,之前使用setparent失败了,所以直接在构造函数中把A的句柄穿进去就好了(findwindow来查找A的句柄),但是由于A中使用了waiforsingleobject后,当弹出的dlg使用domodal时,此时向父窗口发送消息,而A此时为挂起状态,故造成消息阻塞,domodal无法弹出窗口,整个程序也会阻塞崩溃。  这是因为waitforsingleobject只会在接收到他等待的object时才会返回, 这里要使用mfc的MsgWaitForMultipleObjects ,该函数只要可以接收到的object都会有返回  这是可以采用循环的机制来解决之前阻塞的问题

	while (TRUE)
	{


		DWORD result;
		MSG msg;


		result = MsgWaitForMultipleObjects(1, &m_hFMThread,
			FALSE, INFINITE, QS_ALLINPUT);


		if (result == (WAIT_OBJECT_0))
		{
			break;
		}
		else
		{
			PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
			DispatchMessage(&msg);
		}
	}
2、在dll中使用mfc,在使用到涉及资源的函数时,如domodal loadbitmap 等 ,需要在开头加上 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 

这里是dll的资源切换,具体没有深入研究  该函数只在所处函数生命周期内有效、

3、对于bstr char 等new操作或其他创建后记得释放 不要造成内存泄露...



MFC 创建带窗口的dll链接库.窗口为非模态窗口 语言:VS2008 代码实现功能:创建一个MFC Regular Dll链接库。要求链接库注入到目标进城后能调出Dll内部的MFC窗口.目标进程为第三方进程程序 步骤: 1,创建项目->MFC Dll; 2,在自动生成的项目代码中添加 Dialog对话框资源. 3,为对话框资源添加 窗口类 4,声明一个呼出窗口函数.startmythread.此函数可以导出也可以不导出  导出 阅读详情

相关推荐

多线程解决mfc对话框未响应、卡死问题

多线程解决mfc对话框未响应、卡死问题

MFC主线程使用WaitForSingleObject阻塞的问题

在MFC程序的主线程中如果使用WaitForSingleObject等线子线程,而子线程里使用了有关于消息的函数,比如SetWindowText,InsertItem,SetItemText这些函数,就有会导致主主线程阻塞问题,看看这段代码。 DWORD WINAPI ThreadProc( LPVOID lpParameter // thread data )

十年磨一剑,霜刃未曾试! 1万+

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5330

PeekMessage完美解决MFC主界面无响应

一般主界面无响应的解决方案是,对于计算量过大的方法,另开工作者线程,如下:      MFC支持两种线程:用户界面线程和工作者线程。 (1)用户界面线程:通常用于处理用户输入,响应由用户产生的事件和消息。用户界面线程通常有窗口,有自己的消息循环。CWinApp是一个用户界面线程对象的例子,因为它是从CWinThread派生出来的,而且要处理用户产生的事件和消息。 (2)工作者线程:通常用于处...

匆匆那年 4574

科研党必备:Zotero+Deepseek 打造AI文献阅读助手(附详细插件配置指南)

本文详细介绍了如何利用Zotero和Deepseek打造AI文献阅读助手,提升科研效率。从Zotero基础安装到中文文献处理插件茉莉花的配置,再到Deepseek API的集成与模型选择策略,全面覆盖了AI辅助阅读的关键环节。特别适合需要高效管理海量文献的科研工作者,显著提升文献筛选和分析速度。

backprop5master的博客 424

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 515

在dll内实现消息机制_COM编程攻略(十九 AppID、Dll代理)

上一篇文章谈到COM中组件类别的含义和用途:Froser:COM编程攻略(十八 组件类别)​zhuanlan.zhihu.com这一篇文章来说一下,AppID是什么,以及Dll代理又是什么。一、dll代理(DLL Surrogates)我们之前说到了COM开发跨进程的组件:Froser:COM编程攻略(七 COM跨进程组件开发实战)​zhuanlan.zhihu.com简单来说,就是使用CoCre...

weixin_39819138的博客 631

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 332

MFC DLL窗口自动化显示指南:从注入到消息循环处理的完整避坑方案

本文提供了一套完整的MFC DLL窗口自动化显示与管理的避坑方案。针对远程注入场景,详细解析了如何通过创建独立UI线程、正确处理消息循环、配置MFC DLL工程以及实现安全卸载流程,确保DLL窗口在被注入的宿主进程中稳定、可控地显示和运行,避免窗口闪退和进程崩溃等常见问题。

tgb3456789的博客 1002

仿真学习系列(四十九):Sigrity仿真之电容库制作

在高速电路设计中,电源完整性(PI)是确保系统稳定、可靠运行的关键因素。随着电子产品对性能的要求不断提升,PDN(电源分配网络)的设计与优化变得尤为重要。为了确保电源网络在高速工作状态下不会引发电压波动和信号干扰,我们需要在设计中精确地选择电容器进行优化,而电容库的制作则是这一过程的核心。 OptimizePI作为一个强大的电源完整性优化工具,能够帮助设计师根据不同的目标,批量进行PDN仿真,以得出最佳电容选择。

案例文章,高速信号 223

harbor x509: certificate signed by unknown authority【20251222】

本教程通过「合并证书链(服务器端)+ 预置根 CA(客户端)」彻底解决了自签名证书的 x509 错误,同时集成了 Trivy 漏洞扫描,实现了 Harbor 从搭建到实用的全流程。证书链合并是服务器端的关键,确保客户端获取完整信任路径;客户端需同时配置「系统信任库 + Docker 信任目录」,避免 Docker 独立信任机制导致的问题;所有 IP 需保持一致(Harbor 配置、证书绑定、客户端访问),是避免错误的基础。

老韩的Linux云计算架构师进阶之路 681

MFC的进程和线程

MFC教程_ MFC的进程和线程 MFC的进程和线程 Win32的进程和线程概念 进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。线程是操作系统分时调度分配CP

flyaflya的专栏 1845

cartographer如何使用2个反光柱子作为一个landmark

2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐

南北粉面馆 3827

MFC消息循环和消息泵

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送出去

charles的专栏 1345

Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)

本文介绍了如何基于Spring Boot 3.2、Spring AI 1.0.0-M4、DeepSeek API和Redis构建具备上下文记忆功能的智能聊天应用。项目采用现代化技术栈,包括Java 17、Maven、Lombok等,实现了智能对话、会话管理、异常处理等核心功能。文章详细讲解了环境搭建、配置管理(含Redis和AI服务集成)、核心组件设计(如消息实体、控制器和服务层实现),以及完整的项目结构。该项目提供了美观的Web界面和REST API,支持对话上下文存储(通过Redis实现)和系统监控,可

博客 829

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

第八讲 MFC的进程和线程

第八讲 MFC的进程和线程 Win32的进程和线程概念 进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。 线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并

mitesi的专栏 1821

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深入理解MFC消息循环和消息泵的原理

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送出去之后,系统(USER32.DLL)把消息投递到哪个窗口,以及以后消息在窗口之间的传递是怎样的。   消息分为队.

u011555996的博客 1951

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深入理解MFC消息循环

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread:: PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有 一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送

阿福专栏 2283

MFC消息循环

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵WinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送

不完美星空 927

【消息循环&消息泵】MFC消息循环和消息泵

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::Di...

小鱼菜鸟的博客 319

MFC消息循环和消息泵的分析

首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送出去

Invoker's Tower 1153

MFC-通过psapi.dll中的函数枚举进程

这次通过一个实用的小例子讲解一下psapi.dll(头文件是Psapi.h)中几个函数的用法. 效果如图: 这个例子需要用到的知识有: 静态文本http://blog.youkuaiyun.com/qq_18297675/article/details/50978562 ListControlhttp://blog.youkuaiyun.com/qq_18297675/article/details/50983

_ACME_的博客 1846

MFC教程(8)-- MFC的进程和线程

Win32的进程和线程概念  进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。  线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发地执行;一个进程的所有线程共享它的虚拟地址空

cqhawk的专栏 984
上一篇: 认识adb手记
下一篇: 文件模式与文件操作
gldcpp
博客等级 码龄11年 4粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值