在MFC中使用AFXBEGINTHREAD的方法
以前很少使用MFC,今天看到一篇帖子介绍如何简单的写一个下载器的文章,自己蠢蠢欲动地想自己实现以下,结果就遇到了AFXBEGINTHREAD的使用问题。
写客户端时,里实开始只是想着在主线程现下载功能即可,就写了一个,在调试的时候想到可能在下载大文件时可能会导致界面假死的现象,就想到在前不久面试的时候经常提到的afxbeginthread函数创建一个线程专门用于文件下载,而主线程负责鼠标的响应和信息的显示而不出现卡顿的现象,使用afxbeginthread时只是想当然的以为跟使用createthread差不多,然后写完后才发现编译通不过,问题恰恰就出现在afxbeginthread的线程函数指针的传递上。查资料后得之传递给afxbeginthread线程函数指针必须为static函数或者全局函数。使用static函数不怎么合适,因为我还想在线程函数中使用其他的变量,而static函数的限制是在函数实现体中只能使用static变量。而使用全局函数自己还不会,太菜了。后来终于捣鼓出全局函数,当要在线程函数中使用变量时可以通过线程函数的形参传递。
要点1.afxbeginthread的线程函数必须为static函数或者全局函数
要点2.afxbeginthread与createthread的线程函数的区别: 使用前者的线程函数声明为UINT threadfun(LPVOID),后者的线程函数声明为DWORD WINAPI threadfun(LPVOID)
要点3.afxbeginthread是MFC全局函数,是对createthread的封装,createthread是winapi函数。
要点4.afxbeginthread返回CWinthread指针,会new产生一个CWinthread对象,对象会在线程运行结束后销毁,createthread返回的是一个句柄。
转载于:https://blog.51cto.com/caixiaoniao/1051899
在MFC中使用AFXBEGINTHREAD的方法相关推荐
- MFC中Radio Button使用方法
先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,"默认"只要 ...
- 在vc或mfc中显示IplImage的方法
平常使用Open CV时总是跳出一个个窗口,很难将项目进行系统集成,特别是在MFC等Windows环境中加载显示Open CV中的IplImage图像: /********************** ...
- MFC 中 Radio Button 使用方法
先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,"默认"只要 ...
- MFC中使用FLASH相关
2019独角兽企业重金招聘Python工程师标准>>> 一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/ ...
- MFC中创建和使用线程的方法
有关创建线程的问题有三种方法: 1.C语言函数,调用_beginthread(); 2.API函数,调用CreateThread(); 3.MFC函数,调用AfxBeginThread(); 推荐使用 ...
- vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法
vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法 使用Everything查找afxres.h文件,如果没有everything的,可以到 ...
- VC++/MFC中调用CHM帮助文档的方法--ShellExecute
(1)用Word编辑好帮助文档,并保存为网页格式,如mhtml格式. (2)用EasyCHM软件生成chm文档.生成方法很简单的,相信你能很快搞定的!当然用其它方法制作CHM文档也可以了. (3)在M ...
- MFC中动态创建控件以及事件响应实现方法
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...
- 【MFC】MFC中调用系统软键盘的几种方法
1.直接运行微软系统自带的虚拟键盘程序"osk.exe" 在普通MFC项目中可以调用ShellExecute或者WinExec方法来直接运行微软系统自带的虚拟键盘程序"o ...
最新文章
- 浅谈MySQL中utf8和utf8mb4的区别
- SSAS使用时间智能解决本年累计、同比、环比【转载】
- 大话设计模式读书笔记--4.代理模式
- 正则表达式之python3版
- open external url via transaction launcher sina baidu google web
- MVC中业务层是否应该有个基类?它有什么作用?
- 前端:40 个 CSS 布局技巧
- drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化
- 使用 C# 编程对RTF文档的支持
- 关于Ajax和@RequestBody配合使用的问题
- json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 传智播客张孝祥 JavaScript视频教程
- 推荐25个值得收藏的前端开源Awesome项目
- 'grunt' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- 用ECS做HexMap:鼠标点击六边形单元涂色
- JavaFX:集成MarkDown
- 腾讯安全领御为张裕打造高端葡萄酒区块链溯源平台
- RestoreDet
- 使用python计算行列式
- java二维数组遍历与元素查找