zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    DHCP服务的配置(linux)
    LVM逻辑卷
    python的元素列表
    DOS和DDOS你知道多少?
    DOS与DDOS攻击的原理与防范之法
    常见HTTP状态代码,http报错代码翻译
    TCP和UDP优缺点
    DLL何时需共享内存管理器
    Delphi 指针大全
    Delphi编写DLL(以及静态和动态方式调用)
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/14079115.html
Copyright © 2011-2022 走看看