音视频项目—基于FFmpeg和SDL的音视频播放器解析(二)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(一)

解析

首先,我们看 thread.h 的源代码

#pragma once
#ifndef THREAD_H_
#define THREAD_H_
#include
using namespace std;

class Thread
{
public:
	Thread(){}
	~Thread() { 
		if (mythread) {
			Stop();
		}
	}
	int Start(){}
	int Stop() {
		abort = 1;
		if (mythread) {
			mythread->join();
			delete mythread;
			mythread = nullptr;
		}
	}
	virtual void Run() = 0;
protected:
	int abort = 0;
	thread* mythread = nullptr;
};

#endif

thread 没有 .cpp 文件,因此,我们看这一段就够了。

私有成员

我们先看 Thread 的私有成员。有一个变量 abort 和 一个线程 my_thread,abort 是标识位,标志线程能不能使用,不是很重要,未来用到时再讲。

my_thread 是一个线程变量,未来其他两个类继承后,就可以使用解封装,解码了。

公有成员

我们就实现了两个函数,析构函数和 Stop,析构函数就是如果发现了线程还没被销毁,就启用 Stop 函数。因此,Stop 函数是我们这篇文章的唯一的重点了。

首先,Stop 函数将 abort 标志为 1,表示线程不可用,接着如果发现 my_thread 没被销毁的话,通过 my_thread->join(),就是开始阻塞直到 my_thread 将方法完成,然后就 delete 线程,设置成 nullptr,就是删除变量的常用代码,不多解释。

好了,今天的任务比较轻松,就讲了 Thread 这个抽象类的实现方法,重点就是停止函数的实现,也比较好理解。

未来几篇我们就会讲到 Thread 的子类是如何发挥作用的。

欲知后事如何,请听下回分解。

你可能感兴趣的:(音视频,ffmpeg)