最后更新于 .

由于之前一个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++;
    }
}

希望对大家有用~

代码附件下载

 

 

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. a

    a on #

    经典的消费者生产者模型

    Reply

    1. Dante

      Dante on #

      呵呵,是啊,完善了统计和错误流水,这样功能会比较全面一些。

      Reply

发表评论