线程池实践 - wridtedb.h

class WriteDBUnit
    : public ArrayBu
{
public:
    typedef std::function<int(const std::string& msg)> HandleMessage;

    //封装线程池中的对象需要执行的任务对象
    typedef struct task
    {
        HandleMessage run;  //函数指针,需要执行的任务
        //char arg[1048576];              //参数
        std::string arg;

        task()
        {
            run = nullptr;
            //memset(arg, 0, sizeof(arg));
        }
    }task_t;

    //下面是线程池结构体
    typedef struct threadpool
    {
        condition_t cd_task;    //任务状态量
        condition_t cd_thread;  //线程状态量

        std::queue<task_t> que_task;

        std::set<pthread_t> ls_pthreadid;
        int max_threads;     //线程池最大线程数
        bool quit;            //是否退出标志

        // 出任务数量
        int pop_task_count;
        // 休眠时间:秒
        int writedb_thread_sleep;

        threadpool()
        {
            pop_task_count = get_quote_server().config().quote_param_.pop_task_count;
            writedb_thread_sleep = get_quote_server().config().quote_param_.writedb_thread_sleep;

            condition_init(&cd_task);
            condition_init(&cd_thread);
        }

        ~threadpool()
        {
            condition_destroy(&cd_task);
            condition_destroy(&cd_thread);
        }

        bool push_thread(pthread_t pid);
        void pop_thread(pthread_t pid);

        bool pop_task(std::list<task_t>& ls_task);
        void push_task(const task_t& ptask)
        {
            que_task.push(ptask);
        }

    }threadpool_t;

public:
    //线程池初始化
    void threadpool_init(threadpool_t *pool, int threads);

    //往线程池中加入任务
    void threadpool_add_task(threadpool_t *pool, HandleMessage run, const std::string& arg);

    //摧毁线程池
    void threadpool_destroy(threadpool_t *pool);

    WriteDBUnit(const std::string& name, int sessionid);
    virtual ~WriteDBUnit();
    virtual void init(const char* configfilepath);
    virtual void OnReceive(int sessionid, int transactionid, const std::string& msg, long long timestamp);
    virtual void OnEvent(int sessionid, int eventid);

private:
    // 主从切换推送
    int HandleSwitchMasterSlaveRtn(const std::string& msg);

    // 保存合约
    int HandleInstrumentRtn(const std::string& msg);
    // 保存行情
    int HandleQuoteRtn(const std::string& msg);
    // 保存K线
    int HandleKlineRtn(const std::string& msg);
    // 保存逐笔行情
    int HandleTickRtn(const std::string& msg);

private:
    std::map< int, HandleMessage > map_handle_message_;

    threadpool_t threadpool_;

    // 写库线程数量
    int writedb_thread_count_;

    bool is_writedb_;

    // 当前使用的bu号,0号bu使用
    int use_bu_index_;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值