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

希望对大家有用~

代码附件下载

版权所有,转载请注明出处.http://www.vimer.cn





原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]

本文链接地址: http://www.vimer.cn/?p=719

2 个评论 在 “实现多线程对队列的读写操作(封装类)”

  1. a 说:

    经典的消费者生产者模型

    [回复]

    Dante 回复:

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

    [回复]

我要评论

*

*