自定义博客皮肤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)
  • 收藏
  • 关注

原创 win32:windbg定位std::mutex死锁的方法

windows高级调试

2022-07-03 21:55:15 785 1

原创 ndk:调试&日志

一、概述本文档会介绍如何通过native接口写入安卓日志,以及调试的一些技巧。二、日志 日志的使用方法 通过该方式写得日志,会被重定向到logcat里a) Android.mk加入模块编译b) 文件里引用#include <android/log.h>c) 调用头文件里提供的相关接口比如:d) ndk-builde) 把libs拷贝到工程目录,并在as里面引入配置项f) java里面调用na...

2022-03-04 14:03:47 322

原创 ndk:jni

一、概述jni即java native interface,是提供给C++用来开发供Java本地调用的一系列支持接口。以下会从这几个方面来介绍: 类型对应&使用 成员方法(静态/非静态)调用&&成员变量赋值 异常 局部引用&全局引用 线程 二、类型对应&使用基本类型:引用类型:注:基本类型的数据,可以直接使用,但是引用类型不能,必须使用jni的api来存取 字符..

2022-03-04 13:58:23 113

原创 ndk:概述/项目结构/开发流程

一、概述ndk,native develope kit,是安卓提供的一套jvm调用本地C++接口的一套机制,支持在windows以及linux下面进行开发编译。二、NDK提供了什么 ndk给C++提供了一系列C++调用jvm的接口(jni) 交叉编译工具链 输出供安卓jvm使用的.so或者.a文件 三、NDK的项目结构 Andriod.mk:描述需要纳入编译的文件,以及一系列编译参数 Application.mk:描述编译参数 ...

2022-02-28 11:19:01 3401

原创 duilib:从底层分析duilib的大致实现逻辑

按我理解,概括起来,总体包括几个部分,注册窗口,创建窗口,创建控件树,绘制,消息机制。创建窗口&&注册窗口:1. RegisterWindow指定一个静态回调函数WndProc2. CreateWindowEx最后一个参数把自己当作参数传递过去3. WndProc收到WM_NCCREATE消息后,转换一下tagCREATESTRUCT,获取创建的窗口句柄hWnd还有上一步提供的参数lParam,通过SetWindowLongPtr把hWnd,lParam保存下来

2022-01-06 16:04:50 879 1

原创 C++:每天一个挨打小技巧-利用模板做一个高可用的windows命令行解析接口(续)

今天继续来增加挨打技巧,前面写到的一个命令行解析其实可以更狠一点,可以支持所有基本类型的入参解析(后续读者需要新增自定义类型的话也可以自己拓展)下面贴上源码,其中有个接口需要自己实现,CStringUtil::split就是分隔字符串里面内容的。#pragma once #include <deque>#include <typeindex>#include "string_util.h"class CmdHepler{public: template&l

2021-08-07 11:08:59 142

原创 C++:每天一个挨打小技巧-利用模板做一个高可用的windows命令行解析接口

在日常windows开发过程中,很多时候需要调整我们的命令行参数的个数,以下通过模板的特性,设计一个高可用的命令行解析接口。实现:#pragma once class CmdHepler{public: template<typename Tup> static void get_cmd(Tup& tup) { std::vector<std::string> params; int nArgs = 0; LPWSTR *szArglist =

2021-08-06 16:30:09 153

原创 duilib:设计一个“长度不够,按钮来凑“的duilib布局控件

本控件主要为了支持布局内元素很多,但是又不想显示滚动条,意图通过按钮来控制布局滚动的情形。效果图如下:当布局高度足以容纳所有子控件时:当布局高度不足以容纳子控件时:并且上下按钮支持点击翻页功能。主要实现思路:1. 控件构造的时候,把上下两个按钮以及中间的布局给添加到控件里。2. 控件处理绘制事件的时候,通过判断中间的布局滚动条的显示状态来隐藏/显示上下按钮。3. 托管上下按钮的点击通知。4. 由于需要滚动条显示属性的支持,因此只能把滚动条的宽度设置为...

2021-07-26 10:15:01 269

原创 duilib:设计一个高可用,支持uri下载的duilib控件

先喵两句,本文只是提供一个具体思路,直接copy肯定编译不过,需要自己实现以下接口:1.uri下载接口2.主线程调用接口(如果可能的话)3.线程池duilib默认没有支持uri图片的控件,很多业务逻辑都需要自己实现,因此就有了以下的大胆想法,由于图片下载/显示的逻辑都很雷同,没必要一个个继承,然后重复写一套逻辑,显得代码很冗余,于是就有了以下想法,直接用模板类来实现这些接口。代码上面也会有相应的注释,将就着看吧:.h文件:using namespace std::tr2;...

2021-07-24 00:28:18 134

原创 C++:实现支持传参的PPL调用

#prama oncetemplate<typename T>class Task;//偏特化Tasktemplate<typename R,typename... Args>class Task<R(Args...)>{public: using func_type = std::function<R(Args...)>; Task(func_type&& func) : m_fn(std::forward.

2021-06-08 12:37:33 198

原创 C++:可变长参数模板-函数篇

利用C++11的新特性来简化我们的print:1.递归,递归需要有一个终止条件,具体可以有以下几种方式:1.1

2021-05-30 16:47:18 297

原创 C++:C++11里std::thread的那些坑

1. join()函数std::thread里面提供了join函数,等待线程返回,这个本没有什么问题,在C++14以上的SDK版本编译下,这个都没啥问题。但是,在C++11的SDK版本下面编译时,如果在析构函数里面调用join()就要注意了的,假如你是个局部变量还好说,假设你的变量生命周期时整个程序,那么在析构函数里面调用join(),在推出程序时,就会导致进程崩溃(同样的操作在C++14以上完美运行)...

2021-05-10 16:09:47 1371

原创 C++:enable_if与模板偏特化的学习与实践

由于项目的的旧代码不堪入目,只能一块块进行重构,最近找一个结构换json的开源库xpack,为了方便使用,对他封装了一下。但是并不是所有结构体都可以直接使用xpack生成json串,结合最近学到的新东西,我对封装类进行了改造。话不多说,先上代码:#prama oncetemplate<typename T>struct is_x_pack{ template<typename U,typename = decltype(U::xxx)> struct H

2021-05-01 13:26:45 513

原创 win32:DLL以及lib的区别

最近一直在研究项目重构的事情。考虑把所有模块都做成dll的方式让主进程加载:1.静态库存储全局共享变量2.dll存储全局共享变量经过实验发现,如果把静态库编译到dll,exe里面,各自都会保存一份静态库全局变量的拷贝。无法做到数据共享。因此第一个方法行不通。后来对第2种做了实验,发现可行。...

2021-04-25 23:01:10 111

原创 C++:主线程异步调用

.h#pragma once#define SEND_TASK(...) _message_loop_win.SendTask(__VA_ARGS__)#define POST_TASK(...) _message_loop_win.PostTask(__VA_ARGS__)#define POST_DELAY_TASK(...) _message_loop_win.PostDelayTask(__VA_ARGS__)#define CURRENTLY_ON_TID_UI

2021-04-15 20:17:09 629

原创 C++:实现mvvm

最近做了一段时间WPF,印象最深刻就是里面的mvvm模式,打算用C++做一个雏形,并为以后的项目做准备。首先讲一下我对mvvm的理解(可能会有偏差,各位大佬可以指点),mvvm其实可以分开理解为 model , view ,viewmodel 。model提供数据模型,view就是ui,viewmodel做一些跟ui无关的逻辑(更新数据等),跟传统的mvc对比,control很难摆脱与view的耦合,比如更新ui元素等,长期下来,controler的代码只会越来越臃肿。mvvm是一套基于数据绑定的设计模

2021-03-02 00:04:24 2859 3

原创 C++:跨模块调用服务

跨模块调用是一个比较头疼的问题,往往因为模块耦合性比较强,使得代码逻辑比较复杂。1. 如何能实现跨模块调用,又不互相耦合?通知者不关心谁需要处理该消息,处理者也不一定需要知道是谁发送了此消息。windows自带的消息机制刚好可以解决该问题,但是此消息机制有几个致命的缺点:一,必须有窗口支持,当然该部分逻辑可以注册一个虚拟窗口来处理,但是也为编码带来了很大阻碍。二,更致命的是,消息队列在资源紧缺的情况下,还会出现消息丢失的情况。但是PostMessage这个思维还是值得推广的。..

2021-02-09 00:35:11 626

转载 关于linux下/sys目录

sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。本文就 sysfs 的挂载点 /sys 目录结构、其与

2013-04-13 15:00:37 1511

转载 linux下的/proc/目录

1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文

2013-04-13 14:47:45 411

原创 移植QT

QT移植,首先移植tslib1.tslib移植 1.1 解压源码: 1.2 cd tslib, ./build.sh 1.3 在/opt/arm/tslib里就是生成的目标文件 2.qt移植 2.1 解压源码 2.2 首先看一下build.sh脚本,看一下注释内容 ,添加 -lts到qmake.conf文件,然后再执行./build.sh 2.3 make

2013-04-12 14:09:21 718

空空如也

空空如也

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

TA关注的人

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