libuv封装线程

#ifndef __CUVTHREAD__H_
#define __CUVTHREAD__H_
#include "uv.h"
#include "UvSem.h"
#include "CLogmanager.h"
class CUvThread{
public:
    CUvThread();
    virtual ~CUvThread();

public:
    int Start();
    int Quit();
    void Wait();
    void Activate();

public:
    static void ThreadEntry(void *pParam);

protected:
    virtual int OnThreadRun() = 0;
    virtual int OnCreate();
    virtual int OnQuit();
    virtual int OnDestroy();

protected:
    bool mbQuit;

private:
    uv_thread_t mstThread;
    CUvSem mcUvSem;
    bool m_bInit;
};

#endif



#include "UvThread.h"

CUvThread::CUvThread(){
    m_bInit = false;
    mbQuit = false;
}

CUvThread::~CUvThread(){
    Quit();
}

void CUvThread::ThreadEntry(void *pParam) {
    if (nullptr != pParam) {
        CUvThread* pUvThread = reinterpret_cast<CUvThread*>(pParam);
        if (nullptr != pUvThread) {
            pUvThread->m_bInit = true;
            pUvThread->OnThreadRun();
            pUvThread->OnQuit();
        }
    }
}

int CUvThread::Start() {
    ASSERT_RET_VALUE(m_bInit == false, 1);
    OnCreate();
    if (uv_thread_create(&mstThread, CUvThread::ThreadEntry, (void*)this) != 0){
        LOG_ERR("uv_thread_create error");
        return 1;
    }

    while (!m_bInit) {
        sleep_ms(10);
    }

    return 0;
}

int CUvThread::Quit() {
    mbQuit = true;
    if (m_bInit) {
        uv_thread_join(&mstThread);
        m_bInit = false;
        return OnDestroy();
    }

    return 0;
}

int CUvThread::OnCreate() {
    LOG_INFO("Enter CUvThread::OnCreate");
    return 0;
}

int CUvThread::OnQuit() {
    LOG_INFO("Enter CUvThread::OnQuit");
    return 0;
}

int CUvThread::OnDestroy() {
    LOG_INFO("Enter CUvThread::OnDestroy");
    return 0;
}

void CUvThread::Wait() {
    mcUvSem.Wait();
}

void CUvThread::Activate() {
    mcUvSem.Post();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值