线程基类的实现(一)

来源:互联网 发布:帝国cms 文件权限 编辑:程序博客网 时间:2024/06/06 04:27
#include <iostream>
using namespace std;
#include <pthread.h>
#include <unistd.h>


//实现一个线程基类,使得只要继承该基类的子类实现run函数,通过多态则可轻易实现线程创建。
//2012-5-11
class ThreadBaseClass
{
private:
        pthread_t t;
public:
        virtual void run()=0;


        static void *run(void *ppp)
        {
                ThreadBaseClass* p = (ThreadBaseClass*)ppp;
                p->run();
        }


        void start()
        {
                pthread_create(&t,0,run,this);
        }
};


class SonThread : public ThreadBaseClass
{
        void run()
        {
                for(int i=0; i<7; i++)
                {
                        cout << i << " ";
                        cout.flush();
                        sleep(1);
                }
delete this;//如果是通过多态的形式new的方式,则这一招释放内存的方法非常有效
        }
};
class SonThread2 : public ThreadBaseClass
{
        void run()
        {
                for(char i = 'A'; i<='G'; i++)
                {
                        cout << i << " ";
                        cout.flush();
                        sleep(1);
                }
delete this;//但是,注意,如果不是以new的形式实现多态,则行代码会带来灭顶之灾
        }
};
int main()
{
        ThreadBaseClass* p = new SonThread();
        p->start();
        ThreadBaseClass* p2 = new SonThread2();
        p2->start();
        while(1);
        return 0;
}

原创粉丝点击