自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (3)
  • 收藏
  • 关注

原创 Java synchronized遇到的坑

当两个线程使用synchronized同步两个类型和值都相同的final变量时,神奇的一幕发生了,这两个锁变成了同一把锁!子线程先获取到锁0后,主线程获取锁1阻塞了,直到子线程释放锁0主线程才获取到锁1!两个线程“被”同步了! private final Boolean lock0 = true; private final Boolean lock1 = true; private void syncTest() throws InterruptedException {.

2022-04-11 16:59:17 579

原创 AAC / G711A / PCM 音频格式解析

Android利用AudioTrack录制和播放PCM格式音频:public class PCMTalk { private AudioRecord audioRecord; private int sampleRate; private int channel; private ByteBuffer recordBuf; private AudioTra...

2018-03-17 14:59:05 9142 2

原创 JNI编程——Java与c++代码互相调用及数据传递

Java层作为应用层,需要启动一个c++服务,同时需要互相调用及数据交互。Java调用c++,并传递int型参数JNIEXPORT void JNICALL Java_com_lp_lcmedia_LCInterface_initJni(JNIEnv *env, jobject instance, jint mode) {}c++调用Java的非static方法需要有Java层的实例才能调用。在上

2018-01-15 19:06:43 3185

原创 gdb调试相关知识

如果是release版本的程序(编译的时候没有加-g选项),程序崩溃后用gdb分析core文件,只能定位到哪个函数挂了,而如果是debug版本,则能定位具体哪一行挂了。

2017-11-04 16:19:33 280

原创 jni层调用java层方法遇到的bug

今天试了各种方法,想在jni c++的其他线程调用java层的代码,不管是java的静态方法还是实例的非静态方法都不行。只要app运行是一运行到调用的地方,就奔溃。就只能在native函数的当前线程调用java方法。然后用c代码却可以。这也太奇怪了。不过我项目用的是c++,就只能这样了,把我的c++项目编成动态库,jni层用c代码,然后在jni层将java回调传入c++库中,以实现c++调用jav

2017-10-26 21:16:18 602

原创 Android调用不符合JNI命名规范的so库

现在有一个纯c++风格的arm平台的动态链接库libbytebuffer.so和头文件ByteBuffer.h,接下来我将先将其封装成符合JNI命名规范的so库,这样JNI能直接调用,然后将JNI层的代码制作成jar包,然后再给Android App调用。这过程中有灰常多的bug,比如我电脑(Win10)装不了高版本的AS,安装程序总是装到一半就停止工作,但是AS2.1.2安装没问题,于是只能

2017-10-13 16:03:15 2533 2

原创 在JNI c++中使用c11

在上篇文章中我们使用gradle自动生成Android.mk并自动调用ndk-build编译生成JNI so库,但是cpp源文件非常简单,当我们需要用到std::thread等c11特性时,还需要对gradle脚本做些改动。cpp源文件中包含<thread>,编译报错:E:\ShareFolder\project\AndroidStudioProjects\JNIDemo\jlib\src\main

2017-09-28 16:39:47 1351

原创 使用aar库封装c++动态库并在Android app中使用

我们要使用某服务的SDK,但是对方只有纯c++风格的第三方的arm架构的动态库(.so),因此无法直接在java app中直接使用,需要将原始so库封装成符合JNI命名规范的so库(以下简称JNI so库),然后才能通过JNI在java app中使用。我的需求并非直接在Android app中使用JNI so库,而是再把JNI so库封装一层,封装成Android app能直接使用的jar包或aar

2017-09-27 20:28:56 4788

原创 c++ 如何高效传递对象,避免不必要的复制

今天在看c11的右值引用特性,遇到个毁三观的问题。在我认知中,函数返回变量会经历两次复制过程,如下例子:#include class A {public: A() { std::cout << " constructor" << std::endl; } A(const A& orig) { std::cout << " copy

2017-07-17 17:07:51 1896

原创 boost::asio的失败尝试

异步服务端写数据没问题,读数据总是失败。网上的异步服务端的例子要么是只有写的,要么是分为两个类的。我这个例子,accept和读写封装在一个类总是失败。#include #include #include #include #include #include #include #include #include using namespace boost::asio;cl

2017-05-11 17:14:12 1756

原创 作为一个c++而非c程序员,该弃函数指针投函数对象了

本文主要讲了一个例子,通过std/boost::bind/function将c风格的函数指针替换为c++风格的函数对象.

2017-03-31 13:33:10 1203

原创 std::runtime_error 异常传递失败

最近开始学习使用cpp的异常。有这样一个使用场景,函数A可能会抛出异常,函数B调用函数A,捕获到A抛出的异常后,做一定的处理,再把这个异常往上抛。main函数调用函数B,捕获到B抛出的异常,但内容却是空的。void A() {    throw runtime_error("hello world");}void B() {    try {        A();

2017-02-20 11:21:41 5638

原创 招银科技2017 c++ 面试题

程序内存分布,全局变量、静态变量的存储位置static修饰符作用static全局变量跟普通全局变量区别,存储方式有何区别c++设计一个单例模式,多线程环境下如何设计?用线程锁是否会影响性能?有其他方案吗介绍下c++ socket 模型, 建立tcp连接的步骤。多线程同步方式有哪些进程、线程的区别进程间有哪些通信方式

2017-02-18 21:33:17 4525 2

原创 CentOS下Connector/C++的使用

安装依赖:yum install boostyum install boost-develyum install boost-docyum install mysql-devel下载Connector/C++库:CentOS6 64位CentOS6 32位下载解压得到里面的库文件和头文件。编写测试代码:#include #

2017-01-04 16:48:08 1100

原创 shell下用 %% ## 自定义规则提取字符

Android手机上每个已安装的程序都有对应的安装包即apk文件存在,放在/data/app/下,这也是那些软件备份软件的原理。但是必须要root后才能访问到。我现在要备份应用,就是要复制这些apk文件到其他地方,比如sdcard。用adb shell登录到手机adb shellsucd /data/app/ls */base.apk得到cmb.pb-1/base

2016-11-28 21:20:48 2201

原创 RTP解包

这里讨论的场景为,流媒体服务器推送H264码流,且RTP over tcp。当服务器返回RTSP play 回应后,会发送 | ‘$’(1byte) | channel number(1byte) | rtp packet size(2byte) |然后客户端根据size读取随后服务器发送的rtp包。RTP包格式如下:| RTP header(12bytes) | CSRCs |

2016-11-02 15:28:28 11354

原创 ByteBuffer的初始化及赋值语句

ByteBuffer类没有public的构造函数,只能通过ByteBuffer.allocate(int capacity) 或者 warp 构造对象。如果将一个ByteBuffer 对象a赋值给另一个ByteBuffer 对象b,或者将a作为参数传入函数,都是引用传递,可以理解为c++里对象指针,都不涉及内存拷贝。public static void main(String[]...

2016-11-02 14:48:51 7004 4

原创 Linux下activeMQ与c++客户端的部署与应用

activeMQ作为一个消息中间件,用于p2p或pub/sub模式的消息模型。此时业务上的客户端服务器都是客户端,而activeMQ作为服务器。 1. 怎么使用? 1. 以p2p模式为例,下载安装activeMQ,然后启动,然后运行。 2. 编写客户端1作为消息生产者,发送消息到activeMQ。 3. 编写客户端2作为消息消费者,从activeMQ接收消息。 2.

2016-08-17 23:53:38 1068

原创 浅谈select与epoll函数

第一篇技术博客,哈哈。这里讲的内容都是很浅的,很多细节没讲到,比如select函数读集数量上限,超时,非堵塞设置等等,自己百度吧~~应用场景:很多个客户端同时访问服务器,服务器需要处理各个客户端消息。用法:select:1. 设置读集:将一堆客户端fd通通装入readfds集合FD_ZERO(&readfds); //先清空for(i = 0;

2015-01-31 00:16:32 971

原创 准程序员的自我介绍

我现在是杭电大四在校生,目前在滨江某外企做java开发。我专业是电子信息技术及仪器,其实就是测控技术及仪器。专业上是偏硬件类的,但是这个专业多数人都去做软件了。因为需求摆在那。大二暑假前的两年简直浪费掉了,游戏也没打,恋爱也没谈,技术也没学。直到大二那个暑假,开始跟着电子设计竞赛的大牛学单片机了。单片机软硬都得学,这对我后来对计算机工作原理,程序执行过程的理解有很大的帮助。因为已经算在

2015-01-28 00:23:16 6016 2

NetSpeedMonitor

亲测win10可用。原贴 https://www.52pojie.cn/thread-557669-1-1.html 原贴的 "安装.bat"点击运行可能会有问题:模块"nsm.dll"已加载但对DllRegisterServer的调用失败... 然后我以管理员打开cmd,cd到NetSpeedMonitorX64目录下,运行"安装.bat"里的命令: regsvr32 nsm.dll start nsmc.exe 就成功了。

2017-10-13

Postman_v4.1.3

Postman_v4.1.3

2017-06-14

VC_Linux.exe

微软官网下载巨慢

2017-03-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除