多线程的使用的基本模型
来源:互联网 发布:2k16自创球员捏脸数据 编辑:程序博客网 时间:2024/04/29 19:56
前提条件是封装了线程的回调(保存在LibUtilc.dll中)
在外部实例中经常会使用多个该线程类的实例或则说是选择不同的入口因为外部实例需要进行不同条件的不同的线程处理函数:以上两种情况其实是一个意思见如下代码
// MutilThread.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class CMutilThread:public SimpleThreadObserver{public:CMutilThread();~CMutilThread();public:void start(int nNum = 10);void start1(int nNum = 20);private:virtual int onRun(SimpleThread *st);void ThreadType1();void ThreadType2();private:int m_nNum;SimpleThread _thread1;SimpleThread _thread2;void (CMutilThread::*threadFun)();};CMutilThread::CMutilThread():m_nNum(0){}CMutilThread::~CMutilThread(){}void CMutilThread::start(int nNum){m_nNum = nNum;_thread1.start(this);threadFun = &CMutilThread::ThreadType1;}void CMutilThread::start1(int nNum){m_nNum = nNum;_thread2.start(this);threadFun = &CMutilThread::ThreadType2;}int CMutilThread::onRun(SimpleThread *st){// if(NULL != st && &_thread1 == st)// {// ThreadType1();// }// else if(&_thread2 == st)// {// ThreadType2();// }if(NULL != st){(this->*threadFun)();}return 0;}void CMutilThread::ThreadType1(){while(1){static int num = 0;CFrameCtrl framectrl(m_nNum);framectrl.Proc();printf("thread1 time is %s\n",time_cur_data_time().c_str());num++;if(5 == num){printf("thread1 is break!\n");break;}}}void CMutilThread::ThreadType2(){while(1){CFrameCtrl framectrl(m_nNum);framectrl.Proc();printf("thread2 time is %s\n",time_cur_data_time().c_str());}}int _tmain(int argc, _TCHAR* argv[]){CMutilThread mutilThread;//mutilThread.start(1000);mutilThread.start1(1000);return 0;}附加说明:void (CMutilThread::*threadFun)(); 定义该类的成员函数是为了在onRun调用的时候简化代码,在这种情况下要注意三点:
1>类成员函数的定义
2> 类成员函数的赋值或者是初始化
3> 类成员函数的调用
其实不用类成员函数的话,就需要在onRun 中判断一下,当前传入的线程参数是哪一个的实例
多个线程的函数之间是不会相互影响的,也就是关闭其中一个现场是不会影响到其他的线程的运行的.
另外在其中会用到一个CFrameCtrl这个类是一个功能类似sleep的类,只不过由于sleep的精度不够高,所以这个地方自己写了一个,使用起来就会稍微的麻烦一些吧
如果需要了解SimpleThread和SimpleThreadObserve可以给我发送邮箱meixi@live.cn ;baluoteliz@gmail.com;baluoteliz@icloud.com
0 0
- 多线程的使用的基本模型
- 多线程的基本模型
- [C语言]多线程的基本模型
- fragment的基本使用模型
- Win32 多线程的基本使用
- 多线程的基本使用实例
- iOS多线程的基本使用
- 多线程:NSOperation 的基本使用
- 多线程:NSOperation 的基本使用
- Android 多线程的基本使用
- python多线程的基本使用
- EF OR模型的基本使用
- Django入门-5:模型的基本使用1-模型定义
- Django入门-5:模型的基本使用4-模型查询
- iOS开发多线程-GCD的基本使用
- 网络多线程-GCD的基本使用
- 网络多线程-GCD的基本使用(2)
- 网络多线程-SDWebImage的基本使用
- 怎样才能把jpg格式转换成pdf
- MySQL安装与基本配置
- 小强的HTML5移动开发之路(2)——HTML5的新特性
- Scala教程(五)Map、Tuple、Zip实战
- 程序员修炼之道---从小工到专家(第2章)
- 多线程的使用的基本模型
- canvas每draw一次会创建创建一个图层,translate也是移动新的图层,那save restore还有什么用?
- android中系统权限介绍
- 欢迎使用CSDN-markdown编辑器
- 重磅来袭,使用CRL实现大数据分库分表方案
- 设计模式学习笔记-状态模式
- 移动支付 支付宝接入DEMO
- Linux下的fork和execve结合使用(代码保留)
- C++的重载运算符