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

有限状态机的C++实现(2)-bayonet开源网络服务器框架

接着上一篇文章: 有限状态机的C++实现(1)-epoll状态机,我们今天来介绍更复杂和深入的部分。 为什么会在标题中提到bayonet这个开源项目呢?笔者本人一直想要...

阅读全文

时间相关的一些前后台知识

最近有很多时间相关的一些技术积累,主要分为三块, 1.gettimeofday时间差不准的bug 2.时间的字符串形式和时间戳形式的转化(C语言) 3.提供时间日期选择的...

阅读全文

vim(gvim)一键执行python脚本的bug

前一段时间在博客中和fuadam讨论过python中调用print的时候,是否可以直接打印decode之后的字符的问题。(原文:python-django的中文编码总结) 一开始我...

阅读全文

2则回应给“实现多线程对队列的读写操作(封装类)”

  1. a说道:

    经典的消费者生产者模型

    [回复]

    Dante 回复:

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

    [回复]

发表评论