自己设计工具类区分线程并进入对应线程调试多线程视频软件

来源:http://blog.csdn.net/lezhiyong

视频软件中常见多路视频发送/接收的应用场景,如多用户视频会议、多路视频监控、多人视频群聊等。

一般一路视频涉及到发送端视频采集、显示、编码、网络发送,接收端涉及接收端网络数据接收、解码、显示等数据链路,链路里面也常使用到线程来推/拉数据,那么对于多路视频会有多个线程并发运行,这类视频软件开发中经常遇到需要在代码中定位某函数被哪个线程调用,如一下场景:




调试时候可以使用下面工具类来确定某时刻的数据处理函数processFun和网络发送公共函数被那个线程调用:

头文件:
#define MAX_THREADID_NUM	100

class CViThreadID
{
public:
	static bool SetThreadID(int32 nID);
	static bool IsThreadID(int32 nID);
private:
	static uint32 m_dwThreadID[MAX_THREADID_NUM];
};

Cpp 文件:
#include <Windows.h>

uint32 CViThreadID::m_dwThreadID[MAX_THREADID_NUM];


bool CViThreadID::SetThreadID(int32 nID)
{
	_ASSERT((nSub >= 0) && (nSub < MAX_THREADID_NUM));
	m_dwThreadID[nSub] = ::GetCurrentThreadId();
	return true;
}

bool CViThreadID::IsThreadID(int32 nID)
{
	_ASSERT((nSub >= 0) && (nSub < MAX_THREADID_NUM));
	_ASSERT(m_dwThreadID[nSub] != 0);	
	return m_dwThreadID[nSub] == ::GetCurrentThreadId();
}

使用方法:

第1路视频线程Thread1创建函数()
{
     CViThreadID::SetThreadID(1);
     _ASSERT(CViThreadID::IsThreadID(1));
     …
}
第2路视频线程Thread2创建函数()
{
     CViThreadID::SetThreadID(2);
     _ASSERT(CViThreadID::IsThreadID(2));
     …
}
…..
视频链路类::数据处理函数processFun()
{
   if(CViThreadID::IsThreadID(1))
    {
      //第1路视频线程的数据调试处理
       ….
    }
     ….
}
 
视频数据网络发送公共调用函数()
{
     if(CViThreadID::IsThreadID(1))
     {
          //第1路视频线程的数据调试处理
          ….
     }
     if(CViThreadID::IsThreadID(2))
     {
       //第2路视频线程的数据调试处理
        ….
     }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值