多线程编程之创建工作者线程
来源:互联网 发布:杀病毒的软件 编辑:程序博客网 时间:2024/05/07 11:03
由于之前项目用到了多线程,但每怎么看MSDN的文档,今天复习便仔细看了下,全文翻译如下:
工作者线程:
工作者线程通常用来在后台执行一些用户不需要等待的任务,如一些比较耗时的数学计算(我项目中耗时的数学计算便是相机的标定,需要对一个比较大的矩阵进行SVD分解及其他运算)和后台打印等。
创建一个工作者线程相对来说是一个简单的任务,只需要两步就可以使你的线程工作起来:完成线程函数的编写和开始线程的执行。
线程的开始:在这里我们使用的是MFC里提供的可以重载版本的AfxBeginThread函数。一种版本用来创建工作者线程,另一种版本用来创建用户界面线程。对于创建工作者线程来说需要给AfxBeginThread传递以下参数:
1:线程控制函数的地址
2:传递给线程控制函数的参数(调用这自己决定需要传递给线程控制函数什么参数)
3:线程的优先级,缺省的优先级是正常,即被创建线程的优先级和创建它的线程的优先级相同。
4:分配给线程栈的大小,每一个线程都有一个自己专属的栈,默认值是栈的大小和创建该它的线程的栈大小一样。
5:线程是否立即执行,默认的参数为0即线程创建后立即执行。或者使用参数CREATE_SUSPENDED,使线程创建后被挂起。
6:线程安全级别,默认的安全级别和父线程级别一样。
函数AfxBeginThread创建并初始化一个CwinThread类的对象,并且启动它,返回该对象的地址,以便稍后可以使用这个对象。
线程控制函数(线程要执行的代码)的完成:一旦进入了这个函数,线程就开始了,退出了这个函数线程就终止了。线程函数的原型描述为
UINT MyControllingFunction(LPVOID pParam);
typedef void far *LPVOID;<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">//far只在16位机器下使用,用于扩展内存寻址用,32位下就没用了。</span>
LPVOID实际上是一个没有类型额指针即void类型,你可以将任何类型的指针传递给线程函数,在线程函数里你即可以使用它也可以忽略它。比如说在线程函数里你希望对一个对象里的成员变量进行处理,那么就可以将这个对象的指针传递给线程函数。那么在这里可能有的人问题就来了为什么不把线程函数申明为类的成员函数了,这样线程函数在处理该类一个对象的成员变量时就可以不用传递该对象的指针了。事实上,我们不能把线程函数申明为一个类的成员函数,即使要这样做,也只能申明为静态成员函数,但要注意静态成员函数它不是为哪个对象所特有的,它不能访问类的非静态成员变量。
当线程函数结束时,它必须返回一个UINT类型的值来指示线程结束的原因。一般的,用返回值0代表线程的成功执行,其他值则代表不同的错误类型了。
下面是一个例子:
UINT MyThreadProc( LPVOID pParam ){ CMyObject* pObject = (CMyObject*)pParam;//在使用pParam前都必须将它转换成自己需要的类型 if (pObject == NULL || !pObject->IsKindOf(RUNTIME_CLASS(CMyObject))) return 1; // if pObject is not valid // do something with 'pObject' return 0; // thread completed successfully}// inside a different function in the program...pNewObject = new CMyObject;AfxBeginThread(MyThreadProc, pNewObject);//默认的一些参数可以省略不写<strong>...</strong>
- 多线程编程之创建工作者线程
- 多线程之创建工作者线程和用户界面线程区别
- 多线程之创建工作者线程和用户界面线程区别
- 多线程之创建工作者线程和用户界面线程区别
- MFC多线程之工作者线程
- 工作线程与用户界面线程|多线程之创建工作者线程和用户界面线程区别
- Linux 工作队列之工作者线程创建
- MFC创建工作者线程
- 多线程编程学习3——使用MFC工作者线程
- c++ 多线程编程之创建新线程
- windows 多线程编程 之 线程创建
- 二十一天学通VC++之创建工作者线程
- 多线程之线程创建
- VC多线程编程之线程创建与示例
- VC多线程编程之线程创建与示例
- 【C/C++多线程编程之三】创建pthread线程
- 多线程编程(三)--创建线程之Thread VS Runnable
- 多线程编程(三)--创建线程之Thread VS Runnable
- 【03】【单例模式】
- 调用另一个Activity并返回结果
- 拆分英文名
- 【整理】一堆好吃の数位dp
- 程序员:产品形态变更要迅速;要尽力提高用户留存率
- 多线程编程之创建工作者线程
- Elasticsearch常见问题收集
- Android网络连接判断与处理
- jquery常见问题
- 分享一个从国外网站看到的socket程序,程序并不强悍,但能从代码中看到老外是怎么写代码的,咱可以取长补短
- android activity动态加载
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
- 远程桌面连接时获取本地资源的方法
- C#学习笔记一