IT技术博客大学习 共学习 共进步

实现多线程对队列的读写操作(封装类)

Vimer 2009-12-31 15:55:08 浏览 4,084 次
由于之前一个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(“”);
    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++;
    }
}

希望对大家有用~

代码附件下载

建议继续学习

  1. 无锁消息队列 (阅读 14,124)
  2. 多线程队列的算法优化 (阅读 7,603)
  3. TSQ 的原理 (阅读 6,882)
  4. 各消息队列软件产品大比拼 (阅读 6,083)
  5. Gearman Server 使用 MySQL UDFs 来管理和保持队列 (阅读 5,762)
  6. 进程和线程关系及区别 (阅读 5,264)
  7. MySQL为什么要引入Thread Pool的线程处理模式 (阅读 4,623)
  8. RabbitMQ与Redis队列对比 (阅读 4,224)
  9. 一些队列理论 吞吐量、延迟和带宽 (阅读 4,161)
  10. 最近几个容易错的地方总结(hash_map迭代删除,localtime(),线程状态) (阅读 4,062)