随笔分类 -  C/C++

摘要:背景 使用的lws的版本是v4.3.3,依赖openssl 1.1.1t 初始化和连接 下述代码是一个简单的初始化时创建上下文的例子,callback是跟着子协议走的。所以在创建上下文时callback就已经准备好了 struct lws_protocols protocols[] = { {"no 阅读全文
posted @ 2025-08-07 14:21 leno米雷 阅读(210) 评论(0) 推荐(0)
摘要:LibCurl实现的下载器 使用curl_multi_perform实现的下载器,单线程运行curl的消息循环,并加入任务队列,在执行消息循环后执行任务队列实现,新下载文件的添加和已完成下载文件的移除,确保所有针对curl句柄的操作都在下载线程完成。 速度统计的实现 每个任务有单独的计时器用来统计单 阅读全文
posted @ 2025-05-28 12:31 leno米雷 阅读(95) 评论(0) 推荐(0)
摘要:背景 使用libwebsockets开发了一个SDK,用于建立和服务器的连接,并就接受服务器的推送消息,使用的版本是4.3.3的tag。UE版本是5.3.2 以动态库的方式接入整体SDK,SDK链接了静态的libwebsockets,在qt demo运行良好,但是在接入Unreal Engine d 阅读全文
posted @ 2025-02-20 14:20 leno米雷 阅读(146) 评论(0) 推荐(0)
摘要:Chromium的Timer机制实现是依据其Base库的Thread实现的 sequence_manager 持有 task queue task queue创建task runner TimerBase 纯虚类,抽象类型。 存放了task runner,应该是真正的用于跑定时任务的循环就存在这个类 阅读全文
posted @ 2024-12-25 11:03 leno米雷 阅读(76) 评论(0) 推荐(0)
摘要:OnceCallback OnceClosure RepeatingCallback RepeatingClosure Closure是给消息循环使用的内部任务,特点是返回值和参数都是void,不需要额外的运行环境,是一个完整的可以直接运行的闭包任务。 Callback是绑定闭包,用于绑定函数,自由 阅读全文
posted @ 2024-12-02 17:54 leno米雷 阅读(48) 评论(0) 推荐(0)
摘要:Thread 线程通用接口,跨平台封装,会创建并持有RunLoop对象 // base/threading/thread.h raw_ptr<RunLoop> run_loop_ = nullptr; // 这种写法可以抽离真正的消息循环逻辑到RunLoop中,并且保证这部分逻辑会随着线程主函数结束 阅读全文
posted @ 2024-11-26 15:45 leno米雷 阅读(115) 评论(0) 推荐(0)
摘要:2024/11/20 update mojo本质是Uinx Domain Socket(posix),在本机的进程间进行通信时不会经过网卡,可以少一次拷贝。在Windows上则是管道来实现的IPC。 mojom的用途 主要用于进程间通信,减少模块间依赖。 用接口描述语言书写mojom接口文件,经过编 阅读全文
posted @ 2022-10-08 19:03 leno米雷 阅读(1990) 评论(0) 推荐(0)
摘要:问题的来源,绑定和unique_ptr std::bind绑定unique_ptr的时候生成的类型并非std::function,而是一个不可拷贝的类型,这跟unique_ptr的特性有关,这意味着如果需要暂时保存绑定的函数,没有能够接受对象的类型声明 如果不需要保存可以使用auto来接受绑定的对象 阅读全文
posted @ 2022-09-08 18:23 leno米雷 阅读(485) 评论(0) 推荐(0)
摘要:本文翻译自 "https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage" 介绍 cef是个基于chromium的开源项目。跟chromium项目不同,cef主要聚焦于 google chrome应用开发,cef集中于促进嵌入式浏览器在第 阅读全文
posted @ 2020-01-17 11:12 leno米雷 阅读(1817) 评论(0) 推荐(0)
摘要:下面是cefsimple的入口代码,主要分成两个部分 进程判断 首先是初始化进程的代码,cef的进程结构和chromium类似,都是多进程共用代码。所以cef提供了一些函数来检测主进程(即browser进程)的流程和子进程的流程,以分别执行适合当前执行进程的逻辑。这段代码如下所示。 其中main_a 阅读全文
posted @ 2020-01-15 11:47 leno米雷 阅读(3034) 评论(1) 推荐(0)
摘要:C++的多态分为动态多态和静态多态,其中静态多态主要靠重载和模板来实现,而动态多态则主要靠继承来实现了。 那么静态和动态,怎么算静,怎么算动呢?静态多指编译期能决定的事情,而动态多指运行时才决定的事情。例如重载,在编译期生成符号的时候就已经确定不同的函数了,而继承的重写(override)则是在运行 阅读全文
posted @ 2019-08-20 17:46 leno米雷 阅读(378) 评论(0) 推荐(0)
摘要:pgm不太能用,没有想象中的可靠,重传机制貌似仍然使用组播重传,丢包率80%的网络感觉没啥改进,如果有所好转延迟估计也是个不小的问题。 后听说rtp也有nack机制,webrtc基于rtp实现了重传在一定程度上保证可靠性。 在各路大神的指引下找到了rfc4585,看到了这么一段 RTCP扩展反馈报文 阅读全文
posted @ 2019-08-09 19:12 leno米雷 阅读(2260) 评论(0) 推荐(0)
摘要:Reliable Multicast Programming (PGM)实际通用可靠多播协议,在某种程度上保证多播的可靠性。是IP上层协议,和TCP还有UDP同级,工作在传输层。 在组播传输视频项目中,发现在网络较差的时候,组播传输视频性能下降迅猛,组播的视频几乎到了无法直视的地步,已经不是马赛克什 阅读全文
posted @ 2019-08-08 22:52 leno米雷 阅读(3554) 评论(0) 推荐(0)
摘要:今天代码中遇到使用正则表达式匹配一个文件路径的问题,需要验证传入的文件路径是否合法,学习了简单的正则表达式的写法后,简单写了如下代码,在网上找了一些在线测试正则表达式的网站,测试可以通过。 c++ std::regex match("^[a zA Z]:(\\[a zA Z0 9]+)+$"); s 阅读全文
posted @ 2019-05-10 19:46 leno米雷 阅读(3335) 评论(0) 推荐(0)
摘要:问题发现 在业务逻辑中发现有时使用 这个API创建出来的窗口无法使用其他的API,不仅其他 的API说 而且还有奇怪的警告和报错 第一个报警是 的报警,提示当前创建的窗口加载的页面可能是一个 查询了官方文档,发现如果需要创建一个 需要在 的`manifest`文件中添加如下声明 但是我并没有添加类似 阅读全文
posted @ 2019-03-16 10:59 leno米雷 阅读(530) 评论(0) 推荐(0)
摘要:本篇文档以gpu进程的创建和启动为例,讲述chormium如何启动一个browser进程的子进程 PS:本文使用的chromium代码版本为71 前言 GPU进程的启动时机是由browser进程负责的,browser进程会在进入message loop之前启动两个进程,先是启动zygote进程,然后 阅读全文
posted @ 2019-03-06 21:04 leno米雷 阅读(4403) 评论(5) 推荐(0)
摘要:前一段时间在工作过程中遇到一个场景需要将http response中的request header中的cookie字段取出并进行解析,但是手头没有解析cookie的工具类,同时cookie的表现就是个字符串,于是想到手动分割 但是在C++的标准库中,并没有提供类似split的函数,在有些时候可能会很 阅读全文
posted @ 2019-01-09 13:08 leno米雷 阅读(860) 评论(1) 推荐(0)
摘要:std::future和std::promise std::future std::future期待一个返回,从一个异步调用的角度来说, future更像是执行函数的返回值 ,C++标准库使用std::future为一次性事件建模,如果一个事件需要等待特定的一次性事件,那么这线程可以获取一个futu 阅读全文
posted @ 2019-01-02 08:45 leno米雷 阅读(9486) 评论(0) 推荐(3)
摘要:前一篇没用markdown编辑器感觉不好看,删了重新发 本篇主要讲述线程的管理,主要包括创建和使用线程 启动线程 线程出现是为了执行任务,线程创建时会给一个入口函数,当这个函数返回时,该线程就会退出,最常见的main()函数就是主线程的入口函数,在main()函数返回时主线程就结束了。 如何启动一个 阅读全文
posted @ 2018-12-11 14:29 leno米雷 阅读(779) 评论(2) 推荐(0)
摘要:什么是并发 什么是并发 并发,最简单的理解就是,两个或者以上的活动同时进行。举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等。 在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动。在以前大多数计算机都只有一个处理单元(或者核心),这种计算机在同一时刻只能执行一个任务,任务只能一个 阅读全文
posted @ 2018-11-13 17:11 leno米雷 阅读(1040) 评论(0) 推荐(0)