VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 4375|回复: 68

VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作

  [复制链接]
51_avatar_middle
最佳答案
83 
online_admins 发表于 2018-3-28 10:10:39 | 显示全部楼层 |阅读模式
①、工作线程与界面线程的区别:消息循环
1、模态对话框有自己的消息循环;
但是也不建议在工作线程中执行界面方面的相关操作,会发生意想不到的错误!

2、非模态对话框需要其所在线程中有消息循环:
不信加个 Sleep 试试就知道了!

  1. MSG msg = {0};
  2. while(GetMessage(&msg, NULL, 0, 0))
  3. {
  4.         TranslateMessage(&msg);
  5.         DispatchMessage(&msg);
  6. }
复制代码

===================================================
②、所以,在界面的操作时最好还是在界面线程中进行处理,
但是如果处理的是非本线程的窗口时建议用发消息的方式!
默认MFC类型的对话框工程、文档视图类工程等都是使用的MFC界面线程。
===================================================
③、界面线程的创建:
1、从 CWinThread 类派生自己的子类:CUIThreadApp;
2、重载 InitInstance(必须重载) 与 ExitInstance(可选重载) 函数;
3、在 InitInstance 函数中进行界面的创建;
4、调用 AfxBeginThread 函数开启界面线程: AfxBeginThread(RUNTIME_CLASS(CUIThreadApp));
===================================================
※※※ 小作业:理解并使用MFC中的界面线程!
在非模态对话框退出的时候,进行析构处理,释放资源!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av39728551/?p=3
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1otACajO95sSpFfvNXH-cTQ 提取码:b4m4
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:VC++高级班之多线程篇-[2]线程的运行状态
下一篇:VC++高级班之多线程篇-[4]线程的相关操作
95_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-17 18:55:14 | 显示全部楼层
感谢老大的无私奉献
98_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-23 17:28:04 | 显示全部楼层
谢谢分享  学习
69_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-5 16:05:00 | 显示全部楼层
在线观看  学习
21_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-9 12:05:35 | 显示全部楼层
感谢分享!
56_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-20 15:44:34 | 显示全部楼层
感谢老大的无私奉献
79_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-1 14:12:36 | 显示全部楼层
MFC中用户界面线程的相关操作
21_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-6 12:07:14 | 显示全部楼层

谢谢分享  学习
07_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-7 22:49:48 | 显示全部楼层
谢谢大佬分享
98_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-11 09:57:37 | 显示全部楼层
谢谢大佬分享VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作
10_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-4-20 08:08:43 | 显示全部楼层
继续学习多线程方面的知7识,谢谢老大分享
40_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-25 20:39:37 | 显示全部楼层
                    感谢分享!!!
90_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-2 21:11:50 | 显示全部楼层
感谢老大的无私奉献
84_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-4 20:59:48 | 显示全部楼层
感谢老大无私分享
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-30 12:17:00 | 显示全部楼层
VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作
35_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-30 14:37:16 | 显示全部楼层
谢谢大佬,努力学习
35_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-1 19:27:07 | 显示全部楼层
本帖最后由 Jeff_ 于 2019-6-1 20:23 编辑

编译环境:VS2015

问题
1.关于课后习题InitInstance()中 CTESTDlg *pTestDlg = new CTESTDlg() 的销毁?
我的想法:重载InitInstance()函数使其 返回CTESTDlg  * 类型,然后在ExitInstance()函数中delete
或者 使用智能指针:std::unique_ptr<CTESTDlg> pTestDlg(new CTESTDlg());
请问下思路是否可行?

2.关于AfxBeginThread运行内存不足
AfxBeginThread(RUNTIME_CLASS(CUIThreadApp));
VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作
自己查了资料发现有人改为
  1. CUIThreadApp* pthread = new CUIThreadApp();
  2. pthread->CreateThread();
复制代码

请问有什么其他解决办法去使用AfxBeginThread,因为不用管理释放。。

54_avatar_middle
最佳答案
0 
donate_vip 发表于 2019-6-9 16:20:33 | 显示全部楼层
支持老大,谢谢分享!
45_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-17 15:45:30 | 显示全部楼层
谢谢大佬分享
90_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-26 11:39:52 | 显示全部楼层
感谢老大的无私奉献
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2021-1-16 23:56

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表