mfc的消息管理 *** 作流程你可以介绍一下吗

mfc的消息管理 *** 作流程你可以介绍一下吗,第1张

你应该是线程同步的问题,使用MFC或者windows线程同步,有信号量,互斥量,临界区,事件等,你可以使用全局变量消息本质还是生成了新的线程

自定义消息方法

在头文件声明

#define MYMSG (WM_USER+1)//随便填,但是要大于WM_USER

在头文件声明消息响应函数

afx_msg LRESULT MyMsg(WPARAM wParam,LPARAM lParam);

在对应cpp文件加入消息注册

ON_MESSAGE( MYMSG ,MyMsg)

然后再cpp文件实现消息响应函数

某个地方要发送该消息,先获取到消息响应函数对象指针,然后发消息

比如主框架

((CMainFrame)AfxGetMainWnd())->SendMessage(MYMSG);

后边两个参数根据实现需要添加

#include <afxwinh>

只能在控制台程序使用MFC

#include <afxwinh>和#include <windowsh>互斥

最简单的就是设置一内存共享变量<进程间共享的>

每个实例运行的时候,去查找一个那个变量,如果没有这个变量,就说明没有实例运行就创建它

在窗口有了句柄以后,把句柄值放到这个共享变量里面去如果查找的时候

有这个变量,就是说明有个实例正在运行,那么我们就读取这个变量的值,

再发送一个自定义消息给那个句柄的窗口<就是运行的实例>然后自己退出

运行的实例收到消息后,看窗口现在是否显示,如果没有,就显示它

2我自己刚写的办法:

每次运行的时候枚枚举一个进程,如果进程中有实例的映像名存在<就是exe>

就通过映像名找到进程ID,在通过进程ID找那个主窗口,再和上面的发送消息一样

这种方法有个很大的漏洞,exe文件名改了后就失效并这种方法效率很低,

但是涉及的知识很广,利于学习用

如果想用第一中方法,我给你个读写内存共享变量的一个例子你自己去实现

这个十分简单

要的留邮箱

没用过OPC,不过如果是界面卡死,你可以用SPY++看看窗口消息,再打断点进入处理函数瞧瞧,看主线程卡在了哪里。

另外,你多个线程发送多个消息给主线程,也不知道你主线程接收消息的代码如何处理的。

有没有使用线程互斥。

以上就是关于mfc的消息管理 *** 作流程你可以介绍一下吗全部的内容,包括:mfc的消息管理 *** 作流程你可以介绍一下吗、怎样在WIN32中调用MFC类库、mfc怎样使对话框只运行一个实例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10074526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存