c++
我是榜样
阿里巴巴-皓文 我的微信、QQ:596639669
展开
-
WebRTC gateway janus入门教程:从配置到插件编写
文章链接: http://webrtc.org.cn/webrtc-janus-180426/本文介绍了janus的环境搭建,janus的设计思想,和插件的编写方法。阅读本文后,你能够对janus的使用有基本的认识。具体的细节可以通过阅读源码的方式继续深入了解。...原创 2019-01-05 16:28:21 · 3098 阅读 · 0 评论 -
json解析实例-使用picojson.h
通常c++解析json会使用jsoncpp,使用起来也很方便,但是需要引入几个源文件。如果你不希望引入源文件或第三方库,那么picojson就是一个比较好的选择,因为它只有一个头文件。本文通过一个例子来讲解如何使用picojson##情景介绍统计某一个问题的答题情况,包括每个选项有多少人选择,一共多少人答题。{ "questionId":1, "answerSummary": {...原创 2019-01-05 16:26:04 · 2792 阅读 · 0 评论 -
c++虚表的使用 通过虚表调用虚函数的演示代码
//演示一下c++如何找到虚表地址vptr以及如何通过虚表调用虚函数 #include <iostream> using namespace std; class CTest { public: CTest(){} virtual void Print(){cout<<"hello world"...原创 2019-01-05 16:25:25 · 267 阅读 · 0 评论 -
[小米面试题]一个乱序数组a[0...n-1],求a[j]-a[i]的最大值
##小米面试题一个乱序数组a[0…n-1],求a[j]-a[i]的最大值,其中i&lt;j##一、观察现象观察一个数组 int a[] = {5,19,40,2,100,844,12,3,6,8,33,90};很明显最大差值应该是844-2=842我们把数组分为前后两部分,分割位置为元素2的后面数组分为两个子数组:int a1[] = {5,19,40,2};int a2[] = ...原创 2019-01-05 16:36:05 · 1468 阅读 · 0 评论 -
cef降低视频渲染时cpu使用率的方法
windows客户端中使用了基于webrtc的音视频sdk,同时界面使用的是cef。当webrtc解码出大尺寸视频时,需要通过某些技术将数据投递给javascript进行绘制。##一、使用canvas绘制bmp数据webrtc解码图像后,将数据转换为BMP图像,保存在内存中,javascript通过自定义scheme进行图像的获取,比如请求zhangpengtest://image001....原创 2019-01-05 16:40:39 · 4441 阅读 · 1 评论 -
如何识别 macos/ios 使用跨平台宏定义
在xcode中系统内置的跨平台宏定义在头文件中#ifdef #ifdef APPLE#include &lt;TargetConditionals.h&gt;#endif此头文件中各个平台的宏定义有(以Mac为例):#define TARGET_OS_MAC 1#define TARGET_OS_WIN32 0#define TARGET_OS_UNIX 0#de...原创 2019-01-05 16:59:51 · 5359 阅读 · 0 评论 -
如何编译protobuf for IOS
在为IOS平台编译google protobuf时,我自己制作了一个脚本 :protobuf-build-script该脚本可以自动下载指定版本的源码,并且进行编译,可以修改脚本内部的版本号来编译各个版本。一次编译直接生成armv7 armv7s arm64静态库。xcode8 protobuf-2.6.1 测试通过。希望大家一起维护这个脚本。...原创 2019-01-05 16:58:35 · 827 阅读 · 0 评论 -
如何下载旧版本android NDK
我们可能会有一些旧代码需要旧版本的NDK来编译那么如何下载旧版本NDK呢?方法为:根据版本号拼接下载地址32位版本后缀为x86,64位版本后缀为x86_641、版本号<=r10btar.gz for linux /macos and .zip for windowsLinux:http://dl.google.com/android/ndk/android-ndk-r9b-lin...原创 2019-01-05 16:44:29 · 2301 阅读 · 0 评论 -
cef中c++和javascript数据交互的几种方法
cef中c++和javascript数据交互的几种方法基础知识cef中有两种进程,render进程和browser进程。render进程render进程负责显示web页面,运行javascript代码。v8引擎的初始化是在render进程中调用的,所以你的javascript代码是在render进程中执行的。即使你在browser进程中调用frame->ExecuteJavaS...原创 2019-01-05 16:43:11 · 7853 阅读 · 1 评论 -
从源码编译cef的经验
##最近需要编译cef的3163版本,是20170829发布的版本为了支持windowsxp需要修改chromium代码,因为chromium已经不支持windowsxp了,使用了一些新系统才有的api。所以需要从源码编译cef和chromium由于最近国家限制vpn非常严重,导致经常失败。结果下载chromium一个星期过去了,还没搞完。##总结一下经验,便于下次下载时少走弯路###...原创 2019-01-05 16:42:08 · 1153 阅读 · 0 评论 -
cef中javascript和c++交换二进制数据(arraybuffer)的方法
javascript的arraybuffer如何传到c++?javascript可以通过XMLHttpRequest的Get请求得到arraybuffer类型的数据,也可以通过POST请求,向服务器发送arraybuffer数据。那么利用http请求和cef的custom scheme机制,javascript就可以与本地的c++代码交换arraybuffer数据。注意:javascript...原创 2019-01-05 16:41:40 · 2212 阅读 · 2 评论 -
cef利用off-screen-rendering离屏渲染进行视频录像
##windows客户端如果是通过cef来实现的,那么可以通过osr模式来进行视频录像。##cef off-screen rendering介绍cef的off-screen rendering功能,可以把需要渲染的图像数据,以回调的方式回调给我们,由我们自己来绘制。比如使用opengl绘制纹理。我们可以利用这个数据来进行客户端的屏幕录像。##开启离屏渲染功能###一、修改CefSett...原创 2019-01-05 16:41:09 · 6506 阅读 · 0 评论 -
C与C++社区水火交融 C#重蹈覆辙?
最近,Linux之父Linus Torvalds在事隔三年之后,又一次炮轰C++语言。在国外技术社区掀起新一波的批判C++语言的狂潮。国内技术社区也不甘清净,国内C++的大牛网易的云风也加入论战中。 总结目前各方对C++的批判,主要观点如下: 1. 做系统底层编程(比如linux内核、网易游戏引擎),C++和C相比没有任何优势。因为底层编程不需要C++那么多的“面向对象抽象”原创 2011-09-17 20:58:32 · 775 阅读 · 0 评论 -
类成员函数如何设为内联函数 inline
第一种方式将函数定义在类声明中//Test.hclass Test {int m_count;int GetCount(){ return m_count;}}GetCount 就是内联函数 第二种方式将函数定义在类声明的外部//Test.hclass Test {int m_count;inline int GetCount();}Test原创 2011-11-09 16:54:58 · 1669 阅读 · 0 评论 -
C++内存池的实现
/* @file MemoryPool.h* @note HangZhou Hikvision System Technology Co., Ltd. All Right Reserved.* @brief windows下内存池的实现* @author zhangpeng_nj@163.com* @date原创 2011-11-22 10:14:33 · 1966 阅读 · 4 评论 -
C++算法——递归
统计元素a [ 0 ]至a[n-1] 的和(简记为a [ 0 : n - 1 ])。从代码中我们可以得到这样的递归公式:当n = 0时,和为0;当n > 0时,n个元素的和是前面n - 1个元素的和加上最后一个元素#include using namespace std;int RecursiveSum(int num[],int n);const int MAX=100;原创 2011-11-24 10:55:55 · 2049 阅读 · 0 评论 -
Base64编码的实现(c++) 仅编码部分
//Base64编码:每三个字节将编码为四个字节,每次编码取6bit作为新8bit的后六位,前两位填0 string ZBase64::Encode(const unsigned char* Data,int DataByte){ //编码表 const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr原创 2011-11-09 16:59:06 · 1204 阅读 · 0 评论 -
C++实现输出sin()函数图象
首先创建MFC单文档应用程序在VIEW类中的Ondraw函数中添加代码void CdsfsdsddsView::OnDraw(CDC* pDC){ CdsfsdsddsDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码原创 2011-11-22 10:18:39 · 11985 阅读 · 1 评论 -
MYSQL--语法
数据库: 表,视图(view),索引(index),触发器(trigger),存储过程(storage procedure),存储函数(storage function),事件调度器(event scheduler), 创建表语法: CREATE TABLE [IF NOT EXISTS] tb_name 例: CREATE TABLE user ( id转载 2011-09-20 23:58:38 · 578 阅读 · 0 评论 -
如何编写windows服务程序
如何编写windows服务程序By:张鹏/Hikvision这两天想学习关于如何编写windows服务程序的知识,就上网查了些资料。看了一篇文章《用C 语言编写Windows 服务程序的五个步骤》。但可能由于译者的疏忽,忘记了将关键代码放入该文档,导致初学者可能会看不懂。所以又查阅了相关资料。自己完成了《用C 语言编写Windows 服务程序的五个步骤》中的样例程序。在本文中我希望能给原创 2011-11-22 16:36:47 · 14075 阅读 · 3 评论 -
SetWaitableTimer使用方法之:如何使用setwaitabletimer每个1秒发送一次信号
// waitabletimer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ HANDLE hTimer; LARGE_INTEGER perTime; perTime.原创 2011-10-20 20:03:57 · 1618 阅读 · 0 评论 -
教你使用微软小型数据库esent
#include #include #include #pragma comment (lib, "esent.lib")using namespace std;JET_ERR WriteTest(JET_SESID& sessionID,JET_DBID& dbID){ JET_TABLEID iTableID; JET_COLUMNID iColum原创 2011-11-30 17:12:28 · 4721 阅读 · 1 评论 -
email 邮件发送源代码(c++实现)
//ZBase64为base64编码的实现类,参考我前面的文章 bool CreateSocket() { if(WSAStartup(MAKEWORD(2,2),&wsadata_) == SOCKET_ERROR) { errornum_=WSA_STARTUP_ERROR; ReleaseSocket(); return false; }原创 2011-11-09 17:03:40 · 11640 阅读 · 1 评论 -
语音编码常见概念解释--摘选自speex codec文档
Codec descriptionThis section describes Speex and its features into more details.ConceptsBefore introducing all the Speex features, here are some concepts in speech coding that help better und转载 2015-10-16 13:02:49 · 2029 阅读 · 1 评论 -
c++虚表的使用 通过虚表调用虚函数的演示代码
//演示一下c++如何找到虚表地址vptr以及如何通过虚表调用虚函数//zhangpeng@myhexin.com 20130811#include using namespace std;class CTest{public: CTest(){} virtual void Print(){cout<<"hello world"<<endl;}};int原创 2013-08-11 22:04:15 · 2734 阅读 · 0 评论 -
跨平台的EVENT事件 windows linux
#ifndef _HIK_EVENT_H_ #define _HIK_EVENT_H_#ifdef _MSC_VER#include #define hik_event_handle HANDLE#else#include typedef struct { bool state; bool manual_reset; pthrea原创 2012-06-29 12:50:21 · 6327 阅读 · 0 评论 -
unicode转多字节字符
wcstombs()当第一个参数为空时,返回存储结果字符串需要的字节数支持中文转换需要在调用之前加入语句 :setlocale(LC_ALL,"");完成之后调用:setlocale(LC_ALL,"C");示例代码如下:char * wchar2char(const wchar_t *wch) { assert(wch != NULL);原创 2011-12-27 13:05:12 · 2056 阅读 · 0 评论 -
LevelDB数据库使用
向数据库插入数据的操作如下: leveldb::DB* LocalCacheDB:: m_pDB=NULL;leveldb::Options LocalCacheDB:: m_options;bool WriteToDB(INFO& info){ leveldb::WriteOptions wo; leveldb::ReadOptions ro; wo原创 2011-12-24 15:31:33 · 8367 阅读 · 0 评论 -
演示一下临界区的死锁
// deadlock.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;CRITICAL_SECTION cs1;CRITICAL_SECTION cs2;unsigned int _stdcall threadProc(void* p原创 2011-10-20 19:04:55 · 987 阅读 · 0 评论