0


2.面向对象编程风格

1. 说明

此博客记录如何以面向对象的方式进行编程,以及如何让线程和线程对象同时销毁

2. 相关代码:

2.1 Thread.h
#ifndef_THREAD_H_#define_THREAD_H_#include<pthread.h>classThread{public:Thread();virtual~Thread();voidStart();voidJoin();voidSetAutoDelete(bool autoDelete);private:staticvoid*ThreadRoutine(void* arg);virtualvoidRun()=0;
    pthread_t _threadId;bool _autoDelete;};#endif
2.2 Thread.cpp
#include"Thread.h"#include<iostream>usingnamespace std;Thread::Thread():_autoDelete(false){
    cout <<"Thread() ..."<< endl;}Thread::~Thread(){
    cout <<"~Thread() ..."<< endl;}voidThread::Start(){//创建一个线程,指定线程入口函数ThreadRoutine,参数为this指针(指向实际对象本身)pthread_create(&_threadId,nullptr, ThreadRoutine,this);}voidThread::Join(){//以阻塞的形式等待指定的线程终止pthread_join(_threadId,nullptr);}void*Thread::ThreadRoutine(void* arg){//将传递过来的对象指针转换为Thread*(基类)类型//即基类指针thread指向了派生类对象
    Thread* thread =static_cast<Thread*>(arg);//利用虚函数多态,使用基类指针调用子类对象的函数//也可以理解为此时的基类相当于一个库,回调了子类中的虚函数
    thread->Run();//当子类对象run函数执行完毕后,自动删除当前线程if(thread->_autoDelete){delete thread;}returnnullptr;}voidThread::SetAutoDelete(bool autoDelete){
    _autoDelete = autoDelete;}
2.3 Thread.h
#include"Thread.h"#include<iostream>#include<unistd.h>usingnamespace std;classTestThread:publicThread{public:TestThread(int count):_count(count){
        cout <<"TestThread() ..."<< endl;}~TestThread(){
        cout <<"~TestThread() ..."<< endl;}voidRun(){while(_count--){
            cout <<"this is a test ..."<< endl;sleep(1);}}int _count;};intmain(){/*
    TestThread t(5);
    t.Start();//隐式的传递了一个参数this(&t --> 指向对象本身)
    t.Join();
    *///线程对象和线程本身销毁的时间并不同步//使用下述方式实现线程对象和线程本身同时销毁
    TestThread* t2 =newTestThread(5);
    t2->SetAutoDelete(true);
    t2->Start();
    t2->Join();

    cout <<"主线程运行结束..."<< endl;return0;}
标签: linux 服务器 muduo

本文转载自: https://blog.csdn.net/FY_13781298928/article/details/134838016
版权归原作者 山间点烟雨 所有, 如有侵权,请联系我们删除。

“2.面向对象编程风格”的评论:

还没有评论