• 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");
  • 相关阅读:
    Android 开发 学习网站
    Ping 命令详解
    总结 Mac OS 安装 mysql 遇到的各种坑
    转载:django model orM 用字典作为参数,保存数据
    Django模型层Meta内部类详解 [引]
    Django 框架下的bootcamp搭建 ---第二篇笔
    Django 框架下的Blog 搭建 ---第一篇笔记
    Flask +SQL 操作
    python 开源项目大全
    cent OS 安装python
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/14079115.html
Copyright © 2020-2023  润新知