前提条件是封装了线程的回调(保存在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