以前很少使用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的方法相关推荐

  1. MFC中Radio Button使用方法

    先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,"默认"只要 ...

  2. 在vc或mfc中显示IplImage的方法

    平常使用Open CV时总是跳出一个个窗口,很难将项目进行系统集成,特别是在MFC等Windows环境中加载显示Open CV中的IplImage图像: /********************** ...

  3. MFC 中 Radio Button 使用方法

    先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,"默认"只要 ...

  4. MFC中使用FLASH相关

    2019独角兽企业重金招聘Python工程师标准>>> 一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/ ...

  5. MFC中创建和使用线程的方法

    有关创建线程的问题有三种方法: 1.C语言函数,调用_beginthread(); 2.API函数,调用CreateThread(); 3.MFC函数,调用AfxBeginThread(); 推荐使用 ...

  6. vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法

    vs2019 MFC 中 cannot open include file 'afxres.h' 问题解决方法 使用Everything查找afxres.h文件,如果没有everything的,可以到 ...

  7. VC++/MFC中调用CHM帮助文档的方法--ShellExecute

    (1)用Word编辑好帮助文档,并保存为网页格式,如mhtml格式. (2)用EasyCHM软件生成chm文档.生成方法很简单的,相信你能很快搞定的!当然用其它方法制作CHM文档也可以了. (3)在M ...

  8. MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  9. 【MFC】MFC中调用系统软键盘的几种方法

    1.直接运行微软系统自带的虚拟键盘程序"osk.exe" 在普通MFC项目中可以调用ShellExecute或者WinExec方法来直接运行微软系统自带的虚拟键盘程序"o ...

最新文章

  1. 浅谈MySQL中utf8和utf8mb4的区别
  2. SSAS使用时间智能解决本年累计、同比、环比【转载】
  3. 大话设计模式读书笔记--4.代理模式
  4. 正则表达式之python3版
  5. open external url via transaction launcher sina baidu google web
  6. MVC中业务层是否应该有个基类?它有什么作用?
  7. 前端:40 个 CSS 布局技巧
  8. drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化
  9. 使用 C# 编程对RTF文档的支持
  10. 关于Ajax和@RequestBody配合使用的问题
  11. json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
  12. 传智播客张孝祥 JavaScript视频教程
  13. 推荐25个值得收藏的前端开源Awesome项目
  14. 'grunt' 不是内部或外部命令,也不是可运行的程序 或批处理文件
  15. 用ECS做HexMap:鼠标点击六边形单元涂色
  16. JavaFX:集成MarkDown
  17. 腾讯安全领御为张裕打造高端葡萄酒区块链溯源平台
  18. RestoreDet
  19. 使用python计算行列式
  20. java二维数组遍历与元素查找

热门文章

  1. 分享 10 道 Nodejs 进程相关面试题
  2. InteractiveGraph 实现酷炫关系图谱之前瞻
  3. PHP图片裁剪_图片缩放_PHP生成缩略图
  4. 【并行编程】系统体系结构和组件具体说明
  5. less 命令(转)
  6. 40岁后才明白的道理:人一生奋斗余地很有限--转载
  7. 用C#或JavaScript扩展XSLT
  8. injectionForXcode代码注入步骤
  9. 代码中的输入输出(重定向、文件流C/C++)
  10. 《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一2.2 内部函数与操作