由于之前一个server用到后台线程的功能,所以写了一个线程+队列的通用模型。(代码见文章底的附件)
应用场景:当处理的数据不影响回包,即可以在后台执行。
使用方式:一个(或多个)线程向队列中塞数据,一个(或多个)线程从队列里取数据并执行。
已实现功能:
1.统计功能。支持添加数据次数,添加溢出次数,执行次数,出错次数。
2.写错误流水功能。当添加溢出,或执行出错,会打印错误流水号码,入队列时间,等等,格式可以自己控制。
3.支持继承。可以自由重载想要实现的功能。
使用示例:
#include "thread_base.h"
class CChildThread:public CThreadBase
{
protected:
virtual int Process(StructSyncData * oneData,void* args)
{
//printf("%lld\n",oneData->ID);
return 0;
}
virtual int init(char* cfgFileName)
{
m_ThreadNum=100;
m_BoolWriteBill=true;
return 0;
}
virtual void AfterAddData(long long popID,int iTime,int preRet)
{
if(preRet)
{
int t_Time=time(NULL);
WriteBill("[%lld][%d][%d]\n",popID,iTime,t_Time);
}
}
};
int main()
{
CChildThread t_thread;
int ret;
ret = t_thread.Init(NULL);
if(ret)
{
return 0;
}
t_thread.Start();
long long popID=0;
int i=0;
while(1)
{
StructSyncData *t_data = new StructSyncData();
t_data->ID=i;
t_thread.AddData(t_data,popID);
i++;
}
}
希望对大家有用~
a on #
经典的消费者生产者模型
Reply
Dante on #
呵呵,是啊,完善了统计和错误流水,这样功能会比较全面一些。
Reply