二十一天学通VC++之创建工作者线程
来源:互联网 发布:诱导充值网站源码 编辑:程序博客网 时间:2024/05/02 02:29
创建工作者线程
本人节选自《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++之创建用户界面线程
- 二十一天学通VC++之MFC线程处理概述
- 二十一天学通JavaScript:创建与读取cookie
- 二十一天学通C++之异常概述
- 二十一天学通C++之异常处理机制
- 二十一天学通C++之异常处理机制
- 多线程编程之创建工作者线程
- Linux 工作队列之工作者线程创建
- 二十一天学通之cookie的路径和域
- 二十一天学通C++之使用try/catch捕获异常
- 二十一天学通C++之使用throw抛出异常
- 二十一天学通C语言:函数型指针
- 二十一天学通JavaScript:cookie的编码
- 二十一天学通JavaScript:cookie的编码
- 二十一天学通JavaScript:cookie的生存期
- 二十一天学通JavaScript:cookie的安全性
- MFC创建工作者线程
- Virtual Studio 2008 and SQL
- FLEX- MDI窗口开发实例--转自 博客园 jssy
- JSF技术的相关网站和BBS
- 使用Apache Xerces解析XML文档
- 第一个Proc程序
- 二十一天学通VC++之创建工作者线程
- FLEX教程列表
- DOM文档层级结构
- 电感
- 如何修改wince下的UI(...菜单等)——转载
- OpenSessionInViewFilter 作用
- 去港汇msn部门开会,混了顿午饭
- 创业兵法:简单的商业模式构成
- c#FileStream文件读写