- 博客(253)
- 资源 (9)
- 收藏
- 关注
原创 反思2017 - 无奈
时间2017-08-11 09:51:06问题昨天下午要上公网测试,我负责pc客户端,只做一个功能,就是把音视频数据丢到一个rtsp,服务端获取rtsp数据,并转换成rtmp,最后推到rtmp服务器来分发。 本来这都是小事,和我对接口的是媒体后端,只有一个接口,走的也是rtsp标准协议,媒体后端的开发人员估计40多,比我大10岁左右, 就是上篇文章的M,我们之间的边界非常清楚,我这边以rtsp客
2017-08-11 11:40:20 658
原创 反思2017
说明时间 2017-07-28 11:07:12地点 办公室事发时间 半小时之前角色 产品经理K 后端媒体开发M 总经理Z团队环境 20人的小团队 开发人员10人左右 分到手机 pc 前端 后端java 后端媒体 基本一个部分最多一两人负责办公环境 20多人在100多平的办公室 总经理Z单独一个办公室事件起因 K负责组织人员测试产品的音频问题 M协助检查媒体流是否收到 M
2017-07-28 14:22:41 657
原创 SharedExclusiveLock 共享互斥锁
共享互斥锁,有时也被称为单写多读锁。 简单点的应用场景就是:一个写多个读。代码来源是webrtc的SharedExclusiveLock类// This class provides shared-exclusive lock. It can be used in cases like// multiple-readers/single-writer model.class SharedExc
2017-04-18 15:20:12 2175
原创 dshow-001 介绍
1 dshow是基于windows平台的一种流媒体机制 可以从基于wdm的数字/模拟设备中捕获,也可以直接从windows的视频中捕获 自动检测用户的音视频设备,自动硬件加速 2 dshow是基于com的技术,c++设计,没有管理api dshow可以轻松完成媒体回放/格式转换/捕获任务 3 使用dshow时对com技术要了解多少 如果是app开发者:需要
2017-02-21 16:21:08 6536
原创 mfc tabstop顺序不对
一般发现这种情况时, 场景是这样的 : mfc 用ctrl+d设定了tab顺序,用ctrl+t测试是好的,但是程序运行之后就发现切tab时不是”如我心意”, 在测试中发现下面的情景会引发这种现象: 使用了SetWindowPos 这个api, 解决方法是:ctrl+d 设定tab顺序; 调整不同控件SetWindowPos代码的顺序来控制
2017-02-10 15:58:36 1938
原创 模板笔记007 - 模板的声明、形参、实参
模板笔记007 - 声明 形参 实参声明类模板和函数模板是c++的两种基本类型的模板 模板的声明需要引入一个参数化子句:template <...>联合模板也是类模板的一种和普通的函数一样,模板函数也可以有缺省参数template <typename T>void func1(Stack<T> const&, int max =10){}template <typename T>vo
2016-12-07 13:36:49 1810
原创 模板笔记006 - 术语
1 类和联合都是类类型 2 怎么理解类类型? int类型 string类型 类类型 3 类:由class或是struct引入的类类型 4 类类型包含联合,而类和联合没太多关系 5 类模板是什么? 该类是一个模板,整个类家族的参数化描述 6 模板类是什么? 和类模板类似,只是有两个细微差异:从模板中产生的类、有一个template-id 7 特化是什么? 模板实例化的过程是用具体的值代替实
2016-11-29 10:24:11 624
原创 模板笔记005 - 实战基础知识
模板源代码组织方式比较常见的是“包含模型” 说白一点,就是把cpp和h的代码都放到h中。 也可以把#include 放到h头文件的最后(并不推荐这种)除了包含模型,下面介绍一种显式实例化 举个例子:a.h a.cpp main.cpp 其中a.*是模板文件,main.cpp 用到了a.h , 显式实例化就是在mian中包含a.cpp,且声明模板的实例化(就是将具体类型代替模板参数),说
2016-11-29 09:18:18 424
原创 这几天配置的vim
set nocompatiblefiletype offset rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()Plugin 'VundleVim/Vundle.vim'Plugin 'vim-scripts/a.vim'Plugin 'Rip-Rip/clang_complete'Plugin 'scrooloose/nerdtree'
2016-11-28 10:45:51 1029
原创 模板笔记004 - 技巧性基础知识
1 typename关键字 什么时候使用typename? 最常见的是template < typename T>模板参数;其次当某个依赖于模板参数的名称是一个类型时,需要用typename来修饰。eg:template <typename T>class A{ typename T::subtype* ptr; // 指向T::subtype类型的指针}先看看如果不使用typen
2016-11-21 15:32:42 611
原创 模板笔记003 - 非类型模板参数
前面两篇笔记记录了函数模版和类模版的基础介绍,这次介绍一下非类型模版参数。在我的理解中,跟数据相关的有类型和值,不管是函数模版和类模版都可以用值或者类型来充当模板参数,在前面的两篇笔记中,记录的都是用类型来充当模板参数,接下来主要介绍非类型(值)模板参数。从设计的角度看,非类型模板参数并不适合使用缺省值。 而非类型模板函数,非常适用于函数指针。当然这一切都有限制: 通常,非类型模板参数尅是常整数
2016-11-10 10:40:11 457
原创 A a; A a(); A a(""); 没有严谨的态度,就做不好C++
现在时间是2016-11-8 17:31:24今天为了取质数的性能分析而写了一个用来计量代码块执行时间的类:#pragma once#include <chrono>#include <string>class CostTime{public: CostTime(const std::string& msg = ""); ~CostTime();private: std::chro
2016-11-08 17:48:18 499
原创 c++标准库之时间戳、时间段
以前的时间日期库只能支持到秒、毫秒。并不能支持微妙纳秒,c++11带来了chrono,来提供高精度的时间日期库。头文件 < chrono >chrono这个库主要目的是为不同的系统提供高精度的时间和时钟。为了不用每隔10年为一种时间类型重新解读,这次chrono干脆整出了两个新的概念: duration:时间段 eg:2分钟、120秒 timepoint:时间点,时间点是由两部分组成:时间段 +
2016-11-08 17:28:49 7080
原创 模版笔记002 - 类模版
类可以被一种或多种类型参数化。容器类就是一个典型的例子eg:MyStack< T >是类的类型,在声明的时候,如果模版类型的地方,直接使用T就行,如果要使用类类型的地方就需要指明是MyStack < T >, 例如拷贝构造,赋值构造,移动构造,右值拷贝构造。这当然不是绝对要求的,但是为了保证不出错,还是最好这么写。如果是使用类名而不是类类型时,应该使用MyStack,例如构造函数和析构函数。对于
2016-11-04 14:08:30 413
原创 模版笔记001 - 函数模版
通常而言,不是把模版编译成一个可以处理任意类型的的单一实体,而是对于实例化模版参数的每种类型,都从模版产生出一个不同的实体。用具体类型代替模版参数的过程称为实例化。模版会被编译两次:一次是在实例化之前,检查模版代码本身是否有语法问题;另一次是在实例化期间,检查所有的调用是否有效。在实参推导过程中,每一个参数都必须正确匹配,不允许自动转换。如果参数不匹配,常用的有3种方式来处理:强制类型转化、显
2016-11-03 15:40:01 427
原创 c++教程课后练习题
1:在一个循环中读入两个int并打印出来,如果遇到’|’就退出程序。 分析: 从键盘输入中读取两个数,有可能读的是非数值类型,所以第一点,非数值类型需要考虑到; 两个int + 一个字符是题目中需要体现的。那么读取出来后的存储类型就需要提前设计好。因为从键盘输入读出来的数据不能确定是不是数值类型,所以不能放在int 或是char上,正好string倒是可以存放,存放之后可以转成int; 一次
2016-11-03 14:59:55 992
原创 杂项-cpp
c++ 写完代码到能跑起来,要经过编译 链接 。我们的.cpp .h 被称为源代码,给人看的,机器现在还看不懂,所以需要编译器把源码转成机器能看懂的object file,最后由链接器把多个object file组合成一个exe可执行文件。在写编程中必然会遇到以下几类错误: 编译时错误(编译器找到的错误,eg:语法错误等) 链接时错误(eg:库冲突) 运行时错误(eg:逻辑错误)。一般来说 编
2016-10-28 10:57:12 606
原创 something new
新的写法说明:以下都是记录日常中遇到的一些很少见到过的写法,时代在进步,c++在发展,下面有些可能是新写法,也有可能是老写法。new(space){t};说明: 在a tour of c++中有这么一个写法template<typename T>void Vector<T>::push_back(const T& t){ if (capacity()<size()+1)
2016-10-25 17:44:07 499
原创 输入输出流
ostream将类型对象转换成字节/字符流 istream将字节/字符流转换成类型对象<< put to>> get fromiostream提供了大量的操作来处理输入输出格式,这些格式控制被称为操作符(manipulators),eg:一个int以整形、二进制、十六进制输出文件的fstream 字符串的stringstream都是比较常用的
2016-10-25 13:41:55 458
原创 templates
啥是模版? 把类型或是值当成参数的类或是函数。template<typename T>class A{public: explicit A(int s); ~A(){ delete [] e; } T& operator[](int i); const T& operator[](int i) const; int size() const { retu
2016-10-24 16:50:08 408
原创 类的简述
c++的语言特性支持oop和gp编程。 oop是指面向对象编程。gp是指泛型编程。c++的核心特征就是class 一个好的class应满足以下条件:正确、 易维护、高效、优雅、易使用、易读、易理解实体类、抽象类、类继承是class的三大基础模块实体类 如果她的行为看起来像一个内置类型,就可以称为实体类 eg:vector string 看起来像一个内置类型,除此之外她的行为更丰富容器:一个对
2016-10-21 14:17:48 439
原创 && 右值引用
c++11中的新概念,主要解决了移动语义和完美转发我们平常使用的引用都是指左值引用。 以下是我经常用到的手法: void func( int& v); void func( std::string& s);下面是一个测试例子// ===================================================================================
2016-10-20 17:51:39 5756 1
原创 c++的overload override overwrite 你真的懂了吗
以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。 (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。Overri
2016-10-19 11:37:13 854
原创 c++模块化的简要说明
c++包含了很多单独的开发部分:函数、自定义类型、类继承、模版 c++中有一个概念:单独编译(将声明和定义分别放在.h和.cpp文件中),严格的将,单独编译不是c++语言的讨论问题,而是“为了更好的使用c++”的讨论 为了更大的模块化,在逻辑上通过c++语言特征来实现;在物理上通过更有效的独立编译方式来实现。命名空间可以有效地防止命名冲突 在大型的程序组件编程时(eg:库),namespace
2016-10-17 14:12:08 5671
原创 自定义类型
c++语言分两部分,语言核心和标准库 c++已经为我们提供了一些基本类型,我们可以通过这些基本类型构建复杂的类型 c++提供的内置类型和操作非常丰富,也很low-level(基本:直接、高效,这些操作反应了计算机常规能力) 利用这些内置类型和操作 + 抽象机制 = everything抽象机制是为了让程序员设计和实现自定义的类型(有合适的表示和操作),并且可以非常简单非常优雅地使用这个类型。除
2016-10-14 13:35:51 553
原创 指针 数组 引用
基础知识罗列 char v[6]; char* p; [] 表示 array of *表示pointer to 数组的大小应该是一个constant表达式一元* 表示 contents of 一元&表示 address of除了以前学过的for循环 新标准增加了一种可以range-for语句:int v[] = {1, 2, 3};for (auto x : v){ std
2016-10-13 14:56:49 493
原创 c++的const和constexpr
c++有两种常量: 一种是const:“i promise not to change this value” 一种是constexpr:”to be evaluated at compile time”const 这种值可以在编译时或是运行时赋值,但constexpr的值只能在编译器确定他们两的侧重点不同,就如上面英文写的那样 const侧重于值不变;constexpr侧重于编译期就确定值还
2016-10-13 14:13:46 4298
原创 UI线程和工作线程
在开发带界面的产品时,特别需要注意UI线程和工作线程的耦合性,一定不能太高主要注意两点:UI调用库(工作模块)函数时,函数一定要注意 sleep和同步对象 不然可能会卡住UIUI提供函数让库来回调时,函数里若有界面操作,一定要解耦。 不解耦说不定啥时候就卡住render可以让库来回调,为什么不会卡住UI? 因为render一般是gdip绘图 不涉及到界面操作。
2015-09-11 12:54:27 1275
原创 wix开机启动
前言:之前两个版本都是使用的WixUI_InstallDir前言后来考虑到用户经常安装在系统目录或是根目录,所以第一个变更是取消目录选择,使用默认目录;最近360的认证规则刷新了一次,开机启动(非用户选择)变成了病毒,所以第二个变更便是加入复选框,让用户知晓并有选择的权利。下面就是解决这两个问题的经历:变更一:取消目录选择啥都没变直接改为WixUI_Minimal,最后效果不甚理想:
2015-09-09 18:17:38 1563
原创 CBitmapSlider扩展
http://www.codeproject.com/Articles/4850/CBitmapSlider 试用了很多slider 发现这个还是最稳定 最给力的相对于作者给出的代码 做了如下修改: 1:添加滚轮事件 2:添加EnableWindow的函数:EnableEx代码如下:#ifndef _MEMDC_H_#define _MEMDC_H_//////////////////
2015-07-13 16:58:43 976
原创 msi 2318错误
日志大致如下: DEBUG: Error 2318: File does not exist: E:$RECYCLE.BIN$ROLAD11\Thunder\Data\XLGameBox.PopUpTipInfo\XLGameBox.PopUpTipStrategy.xml 安装程序在安装此软件包时遇到了错误。这可能表示此软件包有问题。错误码是 2318。参数是: E:$RECYCLE.BIN
2015-05-27 16:22:29 2838 1
原创 内存泄漏工具umdh的使用
内存泄漏工具umdh(User-Mode Dump Heap)的使用1:设置符号路径 _NT_SYMBOL_PATH [SRV*C:\symbols* http://msdl.microsoft.com/download/symbols]2:启动堆栈跟踪 gflags-i notepad.exe + ust3:获取快照 tlist umdh -p:124 -f:notepad124_s.lo
2015-05-13 16:38:26 1064
原创 主界面在程序运行时隐藏 DoModal的二三事
隐藏界面比较好的方案是重写DoModal VS2008版 重写:INT_PTR CIGoClientDlg::DoModal(){ // can be constructed with a resource template or InitModalIndirect ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NU
2015-05-12 17:01:04 2265
原创 位置不可用 - 服务中拉起程序报错
CFileDialog c:\windows\system32\config\systemprofile\desktop 引用一个不可用的位置解决方法: http://www.codeproject.com/Answers/896139/CFileDialog-gives-error-C-Windows-system-config-sy#answer3原因: The Desktop dire
2015-04-22 17:59:37 1406
原创 Flash 调试助手 Moster Debugger
http://demonsterdebugger.com/可以下载最新版的air 安装之后会有个使用例子 把第3步中到处的swc导入到项目 以下是测试例子: package { import com.demonsters.debugger.MonsterDebugger;import flash.display.Sprite;public class test_event ext
2015-03-30 13:55:35 758
原创 [Integer divide-by-zero] idiv eax,dword ptr []
0:000> g (2e44.ff8): Integer divide-by-zero - code c0000094 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=000000
2015-03-28 18:04:03 1217
原创 [Access violation ] 2G内地址错误访问
如无特殊说明 环境都是x86系列cpu ia-32 如果是64位会特殊说明的 例子都是引用swd 更详细的说明请看swd一书 以下说明及以后的博客都会有理解偏差的地方 还请各位前辈和战友指正一二 毕竟本人也是一边看书一边记录 难免会有天圆地方的思想 qq 604015858 欢迎随时指导交流对windows来说 一个任务就是一个线程 cpu对任务的保护分为 任务间保护和任务内保护 任务间
2015-03-28 11:35:28 798
原创 vs2008 sp1 + mfc + "error C2628: “std::string”后面接“char”是非法的(是否忘记了“;”?)"
error C2628: “std::string”后面接“char”是非法的(是否忘记了“;”?) error C2628: “std::string”后面接“char”是非法的(是否忘记了“;”?) error C2628: “std::string”后面接“char”是非法的(是否忘记了“;”?) t.cpp(922) : error C2628: “std::string”后面接“ch
2015-03-11 11:45:53 3529 1
原创 opencv protection error
记录下查这个问题的追查路线查看错误表达的意思: 错误意思知道是这么一回事 但是还不知道是具体哪个东东引起的 百度 对了 对于技术较强的 百度就是坑了 这几天得翻墙google好多网站都提到了一个刻录工具nero 全盘搜索 发现没有这玩意 继续google 发现了一个xvid 百度 属于开源的 好东西 暂时没时间了她 继续google (http://www.gfsoso.co
2015-02-13 16:53:27 675
原创 崩溃之gflags
前些日子 遇到一个这样的现象三台电脑 环境都是win7 sp1 x64 配置分高中低三等(后面用ABC代替) 运行一个程序时 发现 B上面运行会失败 指向AR库 而AC上面运行就不会出问题调试也未发现AR库上有问题 (非源码级调试 不同的负责人负责不同的模块 没有上面的批准 源码无法互传) 无奈之下又在其他几台电脑上测试 发现都没有问题这时有人提出环境是否不一样 (
2015-02-05 11:33:53 831
video_preview
2017-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人