创建工作者线程

本人节选自《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++之创建工作者线程相关推荐

  1. VC多线程编程之线程创建与示例

    一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...

  2. VC++ MFC 多线程及线程同步(详细、全面总结!)

    更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC    多线程及线程同步                          ...

  3. [.Net线程处理系列]专题二:线程池中的工作者线程

    目录: 一.上节补充 二.CLR线程池基础 三.通过线程池的工作者线程实现异步 四.使用委托实现异步 五.任务 六.小结 一.上节补充 对于Thread类还有几个常用方法需要说明的. 1.1 Susp ...

  4. 12篇学通C#网络编程——第一篇 基础之进程线程

    在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下 ...

  5. [原创]vc中创建线程并传递参数

    演示了如何创建线程并传递参数给线程函数. 1. 创建一个基于对话框的MFC应用程序 2. 声明一个线程函数(选择作为全局函数) UINT KillWindow(LPVOID pParam); 3. 实 ...

  6. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)

    这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...

  7. 21天学通python-21天学通python

    21天学通python全面.系统.深入地讲解了Python编程基础语法与高级应用.自从计算机诞生之日起,编程就是计算机相关工作的一部分,如今编程不再只是与计算机有关的工作,它已经渗透到社会生成的各个领 ...

  8. 学通C#的24堂课(奋斗的小鸟)_PDF 电子书

    下载地址:http://pan.baidu.com/share/link?shareid=2442589965&uk=721744522  QQ:2864670220 主编推荐     < ...

  9. 21天精通python-21天学通Python 完整pdf扫描版[58MB]

    21天学通Python全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Python语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量 ...

  10. 21天学通python第二版-电子工业出版社-网上书店

    本书全面.系统.深入地讲解了 Python 编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将 Python 语言知识全面.系统.深入地呈现给读者.此外,作者专门为本书录制了大量的配套教学 ...

最新文章

  1. java web服务与配置,Java Web远端服务器的配置与部署
  2. BZOJ 1050: [HAOI2006]旅行comf(枚举+并查集)
  3. 网站自动登录功能的设计[转]
  4. 基于 Laravel Route 的 ThinkSNS+ Component
  5. 《实时控制软件设计》第一周作业
  6. map/multimap用法详解
  7. 适用于Java开发人员的Elasticsearch:命令行中的Elasticsearch
  8. java学习(44):引用参数传递
  9. KG—ARM-Thumb子程序调用规则—ATPCS
  10. 中国 AI 的“黄埔军校”?MSRA 被曝停招“国防七子”及北邮学生
  11. oracle日期加一天的函数,关于oracle日期函数的介绍和使用
  12. 扩展欧几里得算法求逆元c语言,扩展欧几里得算法及求逆元
  13. k-means聚类算法原理简析
  14. 分发自动化_使用bitrise自动化应用分发
  15. 微信如何用软件测试是否被拉黑,怎么知道微信里对方把自己拉黑或删除了?微信被好友拉黑检测方法...
  16. 李宏毅老师《机器学习》课程笔记-6 GAN
  17. Git与代码托管平台
  18. Xmanager5 Passive 图形界面安装oracle,无法使用鼠标
  19. [Pycharm] 取消被excluded的文件夹
  20. USB2.0 HUB芯片 GM8220S完美替代创维GL850G

热门文章

  1. android获取周围AP信息(上)
  2. Elasticsearch 安装随笔
  3. IOS之Objective-C学习 工厂模式
  4. 第一次用Axure~
  5. HDUOJ----4504 威威猫系列故事——篮球梦
  6. 把CMD下的color 方案遍历一遍
  7. 基于python 实现KNN 算法
  8. LinkedHashMap 底层分析
  9. centos6.8下安装dc2012
  10. Ubuntu server搭建vsftpd小记