当前位置: 首页 > wzjs >正文

高校网站推广方案编辑wordpress模板下载

高校网站推广方案,编辑wordpress模板下载,网站 建设 问题,天津美容网站建设1、概述 本篇主要是简单介绍WebRTC中的线程,WebRTC源码对线程做了很多的封装。 1.1 WebRTC中线程的种类 1.1.1 信令线程 用于与应用层的交互,比如创建offer,answer,candidate等绝大多数的操作 1.1.2 工作线程 负责内部的处理逻辑&…

1、概述

本篇主要是简单介绍WebRTC中的线程,WebRTC源码对线程做了很多的封装。

1.1 WebRTC中线程的种类

1.1.1 信令线程

用于与应用层的交互,比如创建offer,answer,candidate等绝大多数的操作

1.1.2 工作线程

负责内部的处理逻辑,比如音视频编解码、采集、渲染这些操作,平滑处理,质量监测

1.1.3 网络线程

负责网络数据包的转发,工作线程对音视频数据进行编码后,发送编码后的音视频数据到网络。

从网络中接收音视频数据包,然后交给工作线程进行解码,丢包处理等操作

1.2 peerconnection_client

peerconnection_client一共创建了5个线程,分别为

主线程:windows中main函数的,处理窗口消息的线程

与信令服务器连接处理的线程:PhysicalSocketServer关联

信令线程:PhysicalSocketServer关联

工作线程:NullSocketServer关联

网络线程:PhysicalSocketServer关联

1.3 线程类关系图

1.4 线程类

class RTC_LOCKABLE RTC_EXPORT Thread : public TaskQueueBase {public:explicit Thread(SocketServer* ss);SocketServer* socketserver();bool Start();virtual void Stop();virtual void Run();bool ProcessMessages(int cms);protected:void PostTaskImpl(absl::AnyInvocable<void() &&> task,const PostTaskTraits& traits,const Location& location) override;private:absl::AnyInvocable<void() &&> Get(int cmsWait);void Dispatch(absl::AnyInvocable<void() &&> task);#if defined(WEBRTC_WIN)static DWORD WINAPI PreRun(LPVOID context);
#elsestatic void* PreRun(void* pv);
#endifstd::queue<absl::AnyInvocable<void() &&>> messages_ RTC_GUARDED_BY(mutex_);std::priority_queue<DelayedMessage> delayed_messages_ RTC_GUARDED_BY(mutex_);SocketServer* const ss_;
#if defined(WEBRTC_POSIX)pthread_t thread_ = 0;
#endif
#if defined(WEBRTC_WIN)HANDLE thread_ = nullptr;DWORD thread_id_ = 0;
#endif
};
  • 成员变量 thread_ 在不同平台有不同的实现,win下采用线程内核对象创建,linux下采用pthread创建
  • 成员变量 messages_ 相当于里面保存的是函数对象,只不过用absl库,我们可以把它当做是std::function函数对象
  • 线程之间通信,通过PostTask函数进行,相当于线程1需要执行的任务放入线程2的queue,然后线程2不断从queue读取任务执行,这样来进行通信

1.5 线程管理类 

class RTC_EXPORT ThreadManager {public:static ThreadManager* Instance();static void Add(Thread* message_queue);static void Remove(Thread* message_queue);Thread* CurrentThread();void SetCurrentThread(Thread* thread);private:// This list contains all live Threads.std::vector<Thread*> message_queues_ RTC_GUARDED_BY(crit_);#if defined(WEBRTC_POSIX)pthread_key_t key_;
#endif#if defined(WEBRTC_WIN)const DWORD key_;
#endif
};

线程管理类ThreadManager用到一个技术点是线程本地存储(TLS),需要理解这个技术点,否则比较难读懂WebRTC源码中线程这块的代码。

1.5.1 线程本地化存储(TLS)

#include <windows.h>
#include <stdio.h>// 全局 TLS 索引
DWORD tlsIndex;// 线程函数
DWORD WINAPI ThreadFunction(LPVOID lpParam) {int threadNum = *(int*)lpParam;char buffer[256];// 为当前线程设置 TLS 值sprintf_s(buffer, "线程 %d 的私有数据", threadNum);TlsSetValue(tlsIndex, strdup(buffer));  // 注意:使用 strdup 分配内存// 获取并打印当前线程ID和TLS值DWORD threadId = GetCurrentThreadId();char* data = (char*)TlsGetValue(tlsIndex);printf("线程 ID=%lu, 编号=%d, TLS 数据: %s\n", threadId, threadNum, data);// 清理分配的内存free(data);return 0;
}int main() {// 分配 TLS 索引tlsIndex = TlsAlloc();if (tlsIndex == TLS_OUT_OF_INDEXES) {printf("TlsAlloc 失败,错误码: %d\n", GetLastError());return 1;}// 在主线程中设置并获取 TLS 值char mainBuffer[256];sprintf_s(mainBuffer, "主线程的私有数据");TlsSetValue(tlsIndex, strdup(mainBuffer));// 打印主线程ID和TLS值DWORD mainThreadId = GetCurrentThreadId();char* mainData = (char*)TlsGetValue(tlsIndex);printf("主线程 ID=%lu, TLS 数据: %s\n", mainThreadId, mainData);// 创建两个线程int thread1Num = 1;int thread2Num = 2;HANDLE hThread1 = CreateThread(NULL, 0, ThreadFunction, &thread1Num, 0, NULL);HANDLE hThread2 = CreateThread(NULL, 0, ThreadFunction, &thread2Num, 0, NULL);// 等待线程结束WaitForSingleObject(hThread1, INFINITE);WaitForSingleObject(hThread2, INFINITE);// 关闭线程句柄CloseHandle(hThread1);CloseHandle(hThread2);// 清理主线程分配的内存free(TlsGetValue(tlsIndex));// 释放 TLS 索引TlsFree(tlsIndex);return 0;
}

在每个线程中保存的value不一样,每个线程取出来的value就是不一样,通俗地说,假设我们有3个线程,分别为Thread1、Thread2、Thread3, 分别保存value为1、2、3,那么如果当前如果在Thread2运行的代码里面打印value,那么打印的就是2。通过这样的原理,假如当前是信令线程,通过ThreadManager的函数CurrentThread那么返回的就是信令线程,如果需要在网络线程中运行,则需要利用PostTask放入到网络线程中使用,我们可以看到WebRTC源码很多都是用这个来进行判断。

http://www.dtcms.com/wzjs/824917.html

相关文章:

  • 去什么网站可以做ctf的题目珠海专业网站建设费用
  • 做游戏钓鱼网站电子信息工程移动互联网方向
  • 网站被降权后怎么办2345网址大全设为主页
  • 天猫网站建设基本情况品牌策划网站推荐
  • 专业手机网站公司哪家好帮站seo
  • 如何建网站费用多少wordpress字体目录
  • 美发网站 源代码网络推广团队需要哪些人手
  • 推广网站文案素材网站开发外包维护合同范本
  • 网站后台管理规定企业网站推广排名
  • 哪家公司做直播间网站wordpress视频上传太小
  • 个人备案网站营业执照dede 网站版权信息
  • 网站内做关键词连接wordpress 快讯功能
  • 响应式网站软件王战胜局长
  • 合肥网站建设方案服务青海网站建设与维护
  • 电子商务网站策划方案宁波网站建设价格合理
  • 涿州市网站建设下载一个手机app
  • 龙华品牌网站建设期末网页设计学生作业代码
  • 门户网站的特点和优势开州快速建网站
  • 整站模板加盟广告
  • 保定免费网站建站模板建设网站的拓扑图
  • 东莞网站建设 兼职网站服务器租用年度价格
  • 网站后台的目录在哪推进门户网站建设工作会议
  • 上海制作网站多少钱响应式网站企业
  • 制作网站赚钱信息系统开发过程
  • 怎么破解网站后台旅游网站建设首选赢旅动力
  • 网站建设与维护流程图做网站和做软件一样吗
  • 网站源码还可以做授权么数据库导入wordpress
  • 做中国旅游网站的目的与必要性网站开发 小程序开发
  • 网站开发源文件导入毕业设计购物网站怎么做
  • android网站开发WordPress的数据库在哪