IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

Vimer 2009-12-31 15:55:08 累计浏览 4,191 次
本机暂存
由于之前一个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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 一种常见的并发编程场景的处理 (累计阅读 23,588)
  2. 无锁消息队列 (累计阅读 14,276)
  3. 一种高效无锁内存队列的实现 (累计阅读 12,094)
  4. 大并发下的高性能编程 – 改进的(用户态)自旋锁 (累计阅读 9,042)
  5. TT的作者出新作品鸟:kyoto tycoon (累计阅读 7,951)
  6. 多线程队列的算法优化 (累计阅读 7,732)
  7. 程序中的“多线程” (累计阅读 7,322)
  8. 并发框架Disruptor译文 (累计阅读 6,759)
  9. php多线程扩展 (累计阅读 5,469)
  10. 7个示例科普CPU Cache (累计阅读 5,415)