多线程的使用的基本模型

前提条件是封装了线程的回调(保存在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值