二十一天学通VC++之创建工作者线程
创建工作者线程
本人节选自《21天学通VC++》一书
工作者线程可以说是并行执行的一个函数,其一般用来完成那些不需要用户输入的后台任务。例如数据库备份功能和网络连接状态监视等功能。
比如,一个收费站的进口只有一个收费窗口在工作。该收费窗口正在处理正常的车辆收费工作,此时来了一个车队。该车队有许多车,需要花费很长时间来完成其收费工作。为了不使其他车辆阻塞,需要另外新开一个收费窗口,专门用于解决该车队的收费。如果把正常收费的窗口看做主线程,这个新开的窗口就是工作者线程。
简单地说,创建一个工作者线程就是实现一个控制函数,并将其地址传给适当形式的AfxBeginThread函数的问题。一般来说,工作者线程形式的AfxBeginThread的声明格式如下:
CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority,
UINT nStackSize,
DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs
);
其中,主要参数说明如下所述。
pfunThreadProc参数:指定线程的入口函数地址。
pParam参数:指定传递给线程的参数。
简单地说,前两个参数是控制函数的地址和要传送给控制函数的参数。其余的参数可以指定线程的优先级、栈大小、创建后是立即挂起还是立即运行。最后的参数指定线程的安全属性,其默认值为NULL,即表示该线程将继承调用线程的安全属性。
提示:该函数调用成功的返回值是CWinThread类的指针。可以通过它实现对线程的控制。在线程函数返回时线程将被结束,在线程内部可以利用void AfxEndThread(UINT nExitCode);结束线程。其中,nExitCode为退出码。
工作者线程一旦启动,就开始执行控制函数。线程结束,控制函数也就结束了。线程控制函数的原型如下:
UINT MyControllingFunction(LPVOID pParam);
其中的函数名并不是固定的那个函数名,而是用户自定义的函数名,可以为任何合法的命名。如用户自定义名为MyThread。
例如,下面语句创建了一个工作者线程,其中指定线程的入口函数地址为function函数的地址。
UINT function(LPVOID pParam )
{
while(true)
{
printf("Welcome to 21 Visual C++");
Sleep(1000);
printf("/t");
return 0;
}
}
AfxBeginThread(function, NULL); //用于创建工作者线程
二十一天学通VC++之创建工作者线程相关推荐
- VC多线程编程之线程创建与示例
一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...
- VC++ MFC 多线程及线程同步(详细、全面总结!)
更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC 多线程及线程同步 ...
- [.Net线程处理系列]专题二:线程池中的工作者线程
目录: 一.上节补充 二.CLR线程池基础 三.通过线程池的工作者线程实现异步 四.使用委托实现异步 五.任务 六.小结 一.上节补充 对于Thread类还有几个常用方法需要说明的. 1.1 Susp ...
- 12篇学通C#网络编程——第一篇 基础之进程线程
在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下 ...
- [原创]vc中创建线程并传递参数
演示了如何创建线程并传递参数给线程函数. 1. 创建一个基于对话框的MFC应用程序 2. 声明一个线程函数(选择作为全局函数) UINT KillWindow(LPVOID pParam); 3. 实 ...
- VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)
这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...
- 21天学通python-21天学通python
21天学通python全面.系统.深入地讲解了Python编程基础语法与高级应用.自从计算机诞生之日起,编程就是计算机相关工作的一部分,如今编程不再只是与计算机有关的工作,它已经渗透到社会生成的各个领 ...
- 学通C#的24堂课(奋斗的小鸟)_PDF 电子书
下载地址:http://pan.baidu.com/share/link?shareid=2442589965&uk=721744522 QQ:2864670220 主编推荐 < ...
- 21天精通python-21天学通Python 完整pdf扫描版[58MB]
21天学通Python全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Python语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量 ...
- 21天学通python第二版-电子工业出版社-网上书店
本书全面.系统.深入地讲解了 Python 编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将 Python 语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量的配套教学 ...
最新文章
- java web服务与配置,Java Web远端服务器的配置与部署
- BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
- 网站自动登录功能的设计[转]
- 基于 Laravel Route 的 ThinkSNS+ Component
- 《实时控制软件设计》第一周作业
- map/multimap用法详解
- 适用于Java开发人员的Elasticsearch:命令行中的Elasticsearch
- java学习(44):引用参数传递
- KG—ARM-Thumb子程序调用规则—ATPCS
- 中国 AI 的“黄埔军校”?MSRA 被曝停招“国防七子”及北邮学生
- oracle日期加一天的函数,关于oracle日期函数的介绍和使用
- 扩展欧几里得算法求逆元c语言,扩展欧几里得算法及求逆元
- k-means聚类算法原理简析
- 分发自动化_使用bitrise自动化应用分发
- 微信如何用软件测试是否被拉黑,怎么知道微信里对方把自己拉黑或删除了?微信被好友拉黑检测方法...
- 李宏毅老师《机器学习》课程笔记-6 GAN
- Git与代码托管平台
- Xmanager5 Passive 图形界面安装oracle,无法使用鼠标
- [Pycharm] 取消被excluded的文件夹
- USB2.0 HUB芯片 GM8220S完美替代创维GL850G