• TD 多线程


    1,封装pthread

    thread.h

    class Thread
    {
    public:
        Thread() : mRunning(false),mPriority(PRIORITY_NOT_SET) { }
        virtual ~Thread();
        bool start(char* name);
        bool join();
        pthread_t id();
        void yield();
        bool setPriority(int priority);
    protected:
        static void* callback(void* arg);
        virtual void run() = 0;
    private:
        pthread_t mThread;
        bool mRunning;
        int mPriority;
        static const int PRIORITY_NOT_SET = -1;
    };

    thread.cpp

    #include "thread.h"
    
    #define TAG "Thread"
    
    void* Thread::callback(void* arg)
    {
        Thread* thread = (Thread*) arg;
        thread->run();
        return NULL;
    }
    
    Thread::~Thread()
    {
        if (mRunning)
        {
        }
    }
    
    bool Thread::start(char* name)
    {
        pthread_attr_t attr;
        pthread_attr_init(&attr);
    
        //int min_priority = sched_get_priority_min(SCHED_FIFO);
        //int max_priority = sched_get_priority_max(SCHED_FIFO);
    
        if(mPriority != PRIORITY_NOT_SET)
        {
            struct sched_param priority_holder;
            priority_holder.sched_priority = mPriority;
            pthread_attr_setschedparam(&attr, &priority_holder);
        }
        pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
        int ret = pthread_create((pthread_t*)&mThread, &attr, callback, this);
        pthread_setname_np(mThread,name);
        mRunning = (ret == 0);
        return mRunning;
    }
    
    bool Thread::join()
    {
        if (!mRunning)
        {
            return false;
        }
        int ret = pthread_join(mThread, NULL);
        if (ret == 0)
        {
            mRunning = false;
            return true;
        }
        return false;
    }
    
    pthread_t Thread::id()
    {
        return mThread;
    }
    
    void Thread::yield()
    {
        sched_yield();
    }
    
    bool Thread::setPriority(int priority)
    {
        int ret = 0;
        mPriority = priority;
        if(mRunning)
        {
            struct sched_param params;
            params.sched_priority = priority;
            ret = pthread_setschedparam(mThread, SCHED_FIFO, &params);
        }
        return ret == 0;
    }

    2,继承Thread,实现run函数

    class MediaView: public Thread
    {
    public:
        MediaView(SelfQueue *queue);
        ~MediaView();
    
    protected:
        void run();
    』

    3,之间在类中调用start

    start("updatefilelist");
  • 相关阅读:
    字符编码
    数据类型
    流程控制之判断,while循环,for循环
    数据类型,与用户交互,格式化输出,基本运算符
    操作系统,编程语言分类,执行python两种方式,变量,内存管理,定义变量的三个特征
    计算机硬件基础-笔记
    20200714_31adb命令和monkey压力稳定性测试
    20200707_28POM
    20200705_27DDT与Yaml数据驱动
    20200702_26UnitTest套件与运行器
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/14079115.html
Copyright © 2020-2023  润新知