栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

XThread线程类和日志宏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XThread线程类和日志宏

代码

XTools.h

#pragma once

#include 
#include 
#include 

#define LOG_MIN_LEVEL	LOG_LEVEL_DEBUG

#define LOG(level, str) if(((level) >= LOG_MIN_LEVEL) && ((level) < LOG_LEVEL_MAX))				
						{																		
							cout << log_level[level] << " (" << __FILE__ << ":" << __LINE__		
							<< ") " << str << endl;												
						}

#define LOG_DEBUG(str)	LOG(LOG_LEVEL_DEBUG, str)
#define LOG_INFO(str)	LOG(LOG_LEVEL_INFO, str)
#define LOG_ERROR(str)	LOG(LOG_LEVEL_ERROR, str)
#define LOG_FATAL(str)	LOG(LOG_LEVEL_FATAL, str)

enum LOG_LEVEL_TYPE
{
	LOG_LEVEL_DEBUG,
	LOG_LEVEL_INFO,
	LOG_LEVEL_ERROR,
	LOG_LEVEL_FATAL,
	LOG_LEVEL_MAX
};

static const char* log_level[LOG_LEVEL_MAX] = { "[DEBUG]", "[INFO]", "[ERROR]", "[FATAL]" };

class XThread
{
public:
	XThread();
	virtual bool start();
	virtual bool stop();

protected:
	virtual void main() = 0;

protected:
	std::thread m_th;
	bool m_isExit;
	int m_index;	// 线程索引号
	std::mutex m_mtx;
};

XTools.cpp

#include "Xtools.h"
#include 

using namespace std;

XThread::XThread()
{
	m_isExit = false;
	m_index = 0;
}

bool XThread::start()
{
	bool ret = true;
	static int i = 0;
	stringstream ss;

	m_mtx.lock();

	i++;
	m_index = i;
	m_isExit = false;

	m_mtx.unlock();

	m_th = thread(&XThread::main, this);

	ss << "Thread" << m_index << " start!";
	LOG_INFO(ss.str());

	return ret;
}

bool XThread::stop()
{
	bool ret = true;
	stringstream ss;

	m_mtx.lock();

	m_isExit = true;

	m_mtx.unlock();

	m_th.join();

	ss << "Thread" << m_index << " stop!";
	LOG_INFO(ss.str());

	return ret;
}

126_rtsp_demux_thread.cpp

#include 
#include "XDemux.h"
#include "XMux.h"
#include "Xtools.h"

using namespace std;

extern "C"  // 指定函数是 C 语言函数,函数目标名不包含重载标识,C++ 中调用 C 函数需要使用 extern "C"
{
	// 引用 ffmpeg 头文件
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}

// 预处理指令导入库
#pragma comment(lib, "avcodec.lib")


#define CERR(err)  if(err != 0)				
					{						
						PrintError(err);	
						return -1;			
					}

class Test : public XThread
{
private:
	void main()
	{
		while (!m_isExit)
		{
			LOG_INFO("Test");
			this_thread::sleep_for(1s);
		}

	}
};

int main(int argc, char* argv[])
{
	Test t;

	t.start();
	this_thread::sleep_for(3s);
	t.stop();

	return 0;
}

XTools文件中存放共用的一些函数,XThread 为线程类。

LOG 有四个等级,只有 LOG 等级大于最低等级的时候,调试信息才会打印出来。

测试用例运行结果如下图所示:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号