- 博客(94)
- 资源 (9)
- 收藏
- 关注
原创 华米手表安装第三方应用
一、测试环境华米运动手表3(其他类型的华米手表不确定)手表的usb连接线装有android studio的电脑二、前期准备将手表通过连接线接入电脑,然后打开cmd,输入adb devices。没有问题的话会出现以下内容:C:\Users\20578>adb devicesList of devices attachedbfae1b28 devicebfae1...
2020-01-27 22:16:00 16342 2
原创 使用树莓派打造一台收音机
一、材料先放上图片材料:树莓派3b+、tea5767模块(收音机模块)和4根杜邦线。树莓派3b+大约200元,tea5767模块大约25元吧,杜邦线不值钱。顺便说一下,tea5767芯片更便宜,但需要自己做PCB.我动手能力比较差,所以直接买了。树莓派淘宝直接搜就行,tea5767模块放个我买的的链接。https://m.tb.cn/h.eNmGD2h二、连接现在开始接线。首先通过...
2019-09-28 16:07:02 4456
原创 gpgme库的编译和使用
序言除非万不得已,请不要使用gpgme,openssl是更好的选择。原因有三,第一点,openssl能在网上找到很多例子,出错了很容易找到原因,而gpgme吗?呵呵,别看它用的多,但找到的都是gnupg命令相关的,除了stackoverflow能找到点。第二点,openssl封装的不算彻底,而gpgme呢?呵呵,傻瓜式的接口,极易上手,但你就基本了解不到算法了,第三点,你以为使用gpgme就使用...
2019-09-14 22:20:19 2700 3
原创 c++父类与子类的this指针与虚函数表指针
今天遇到一个很有趣的c++写法,将其写成一个小例子分析一波。头文件:#ifndef DEMO1_H_#define DEMO1_H_#include <iostream>#include <typeinfo>using namespace std;class B;class A{public: static B* s_cP;};cl...
2018-08-17 14:50:54 2869 4
原创 qt实现唱片效果
之前做过音乐播放器,但是之前的播放器没有做在线搜索的功能,只能播放本地音乐。所以这次打算利用各个音乐api接口实现在线搜索的功能。看到qq音乐有一个类似唱片的效果,就是音乐图片随着播放慢慢自旋。但是api提供的图片是方形的,如果自己用软件裁剪太麻烦了,所以要在代码里进行处理。所以打算利用遮盖来做出类似的效果。先上代码:diskWidget.h#ifndef DISKWIDGET_H#...
2018-07-03 15:05:14 348
转载 C++中 线程函数为静态函数 及 类成员函数作为回调函数
线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只是起了一个装饰的作用,所以二者并没有必然的关系 线程也是一种资源,是受系统调度的。因此,你必须要让系统知道你的线程的起始位置,即线程函数的指针。Window系统的接口(API)是C标准的,...
2018-03-20 11:08:39 515 1
原创 音乐播放器中期总结(类似于qq音乐的歌词显示)
在前期总结中,我写了多个类控制一个ui界面,事实无须如此。可以把你想要让ui界面下的某个部分让某个类去做,只需要将ui->widget传进该类的构造函数中即可,然后就可以在这个ui部分上为所欲为了。 示例 /播放控制界面/ pcWidget = new PlayControlWidget(ui->playControl);//这个自定义类,用于播放控制栏界面设计上为所欲为了
2017-12-21 23:29:43 554
原创 多个类操作同一个Ui界面的方法(音乐播放器前期总结)
最近自己在做类似于QQ音乐的播放器,用Qt模仿它的界面去写的。本地音乐播放功能差不多实现,除了歌词。现在已实现的功能:(1)本地歌曲播放 (2)播放,暂停,下一首,上一首 (3)从文件夹添加歌曲至本地歌曲列表并显示
2017-12-14 16:59:42 1108 4
原创 学习Qt过程中的一些想法
最近在看《Qt Creator快速入门》 一书,以前也用过Qt,但就像半路出家的和尚,很多部件并不知道作用也没用过,有时为实现某种效果遇到困难时去百度,即使实现了往往知其然而不知其所以然。所以才准备看这本书,看了也收获颇丰。总结一下我今天的一些感想,也是之前不太理解的地方。(1)以前经常实现自己的某个窗口或部件时,都会写自己的类,当然框架它会自己生成。例(1)class MyLin
2017-12-02 01:58:04 300
原创 Qt ui控件代码先后顺序的tips
MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MyMainWindow){ manger = new QNetworkAccessManager(this); connect(manger, SIGNAL(finished(QNetworkReply *)
2017-11-27 01:53:16 1955 1
原创 做个生成和扫描二维码的windows小应用
想做一个视频聊天的程序,因为用到了编码和解码,所以几天一直在自学ffmpeg。无从下手便从最经典的output_examples.c代码看起。着手重写一遍才发现,很多很多API和宏定义都完全不一样了,结合APIChanges 和度娘坑坑洼洼地写了几天快写完了,昨天凌晨手残忘记保存关机了,全没了。不过无所谓了,差不多理解了(强行安慰自己)。在这几天,花了一天时间用qt做了个二维码的小程序,生成二维码
2017-11-12 16:48:56 1336 1
原创 基类和派生类的地址和布局
#include using namepsace std;class A{ int m_nA;};class B{ int m_nB; };class C:public A,public B{ int m_nC;};int main(){ C * pC = new C;
2017-10-19 23:20:56 617 2
原创 c++ this指针常见知识点
this指针是一个很神奇的东西,一个指向对象本身的指针。首先最大的疑问是你在成员函数的形参上没有定义this指针,它是哪来的。其次它怎么能指向对象本身,它占空间吗?它的生命周期多长?下面总结一下答案(1)this指针是一个被编译器隐藏起来的函数参数,每个成员函数默认第一个参数为T *const this(可以看看python类的成员函数,就要手动写this)(2)this在成员函数开始
2017-10-18 00:55:28 293
转载 malloc和new的区别
正文回到顶部前言几个星期前去面试C++研发的实习岗位,面试官问了个问题:new与malloc有什么区别?这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进行重载;然后强行分析了一下自由存储区与堆的区别。回来后感觉这个问题
2017-10-15 23:54:39 150
原创 指针与引用
今天看了《程序员面试宝典》,看到指针与引用一章,看到一些比较好的题目,记录下来,以便之后回想。struct S{ int i; int *p;}main(){ S s; int *p = &s.i; p[0] = 4; p[1] = 3; s.p = p; s.p[1] = 1; s.p[
2017-10-15 20:03:54 144
原创 位运算算法
今天看程序员面试宝典,看到一道很有趣的位运算题。于是,感觉很有用,便总结几道有用常见的位运算算法1 int f(int x, int y) { return (x&y)+((x^y)>>1); }这个位运算目的是为求x和y的平均值,即(x+y)/2分析:首先把x和y想象成二进制数,若求其平均,则先x+y按位相加,
2017-10-12 22:09:28 206
转载 关于namespace的文件组织
在C++新规定里面,引入了#include的方式,而虽然对#include兼容,但是前者解决了在大文件时候的命名冲突问题,下面就讨论一下namespace是如何使用,C++中的容器等使用时候为什么必须加std::,如std::vector vi。我查看了一下C++中的头文件(这里是不包含.h的模板头文件,关于头文件的组织形式,可以参考:C语言中关于.h和.c的问题和.h文件和.cpp文
2017-10-11 22:03:27 260
转载 linux c++线程池实现 - tbsys实现详解
linux线程池 - tbsys实现详解一年前刚刚毕业入职还会写几篇博客,后来项目取消开源要求员工删除博客,写博客这件事情就荒废了。一年后,回忆一下,如果不养成写东西的习惯可能很难积累下知识,成长会慢很多。现在还是继续写吧,也可以读读其它开源代码写一写。tbsys是阿里的一份开源代码,在阿里集团广泛应用,由多隆大神创作,内部代码实现有很多精致巧妙的地方。今天学习下tbsys的线程池实现
2017-10-10 21:52:54 524
转载 linux syscall系统调用获取线程PID
linux syscall系统调用获取线程PID线程idLinux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只
2017-10-10 21:49:04 790 1
原创 python爬虫
刚学python,边看教程亦步亦趋写了个最简单的爬虫,下面介绍一下网络爬虫重要的组件下图是URL管理器:主要作用是保存新的URL,防止重复抓取和循环抓取有两个缓存空间:待爬取URL集合:set(), 已爬取URL集合:set()网页下载器(urllib2)作用:将互联网上URL对应的网页下载器到本地三种常用写法(1)import urllib2
2017-10-06 15:08:29 409
原创 双向循环链表的头插尾插中间插基本操作
以前一致一直用单向链表,而且对链表的理解模模糊糊,经过一段时间的理解刷题,略微懂了链表的操作,下面贴一下我不借助任何书自己通过草稿想出来的双向循环聊表链表基本操作#include #include struct Test{#include #include struct Test{ int num; struct Test *prior; struct Tes
2017-09-29 15:37:12 1913
原创 牛客网刷题总结1
1. 内联函数不能是递归函数,原因:内联函数在编译的时候会展开,而递归函数并不知道它什么时候能结束,也就不知道能展开多少次。所以不能用作内联函数。当然你写上inline编译器会自动忽略掉。2. 返回局部变量的地址是不可以的。这句话展开来说,不是说返回子函数内定义的指针就不对,而是要看指针指向的那段空间在程序内存块的哪个地方。局部变量一般在
2017-09-25 09:28:36 423
原创 商泰面试总结(嵌入式开发)
首先一面面试(技术面)面的不好,很多问题都不会,基础优点薄弱。其次自己b把自己往坑里带,面试官都说再往下说你要陷坑里了。好吧,面试官是个好人,我好羞愧。不过自己能看到自身的不足,认识到自己离一名真正的优秀程序员还有多远的路要走,便如茫茫黑夜能觅得一盏明灯一样的幸运。无论过与不过,都对我的成长有很大的帮助。 下面我讲的不是面试技巧,面试技巧的确有用,但提高自己的能力更重要。下面时我总结面试官问
2017-09-23 13:23:35 2696
原创 linux和windows gcc g++ vc编译器字节对齐
首先可以肯定的说,肯定和编译器有关,vc编译器和gcc,g++编译器肯定不一样,不说明是什么编译器什么系统下问你结构体长度就是在耍流氓。(1)vc编译器下结构体成员首地址地址必须被该结构体成员长度整除,打个比方,double a的首地址如果为0x06, 那是不行的,再填2个字节将其首地址变为0x08。并且最后的字节总长度为最宽长度的整数倍,不足补齐(都是按照对齐模数来的)(2)gcc和g+
2017-09-15 16:16:17 1375 3
原创 写银行管理系统遇到的一点小困惑
作为一名即将找工作的大四狗,最近在写一个银行管理系统,当然纯粹是玩玩的。客户端是用windows 下的QT完成的,服务器的环境是linux。写了6天,客户端大致完成,现在谈谈我在写客户端时遇到的一点小收获和小困惑以及总结(怕我以后遇到同样的错误再犯以此写此文)。(1)由于很久没有用qt,不太熟悉,所以从登陆窗按登陆键跳到主菜单都不太会了。从网上找了点方法,很多说的我一愣一愣的,最后采取最简单的
2017-09-06 15:40:36 725
原创 c++学习2
1.强制类型转换c语言的类型转换 例子: char *b; int *a = (int *) b;缺点:b的步长发生改变,很危险c++:static_cast强制类型转换用于不同数据类型的转换例子:int count = static_cast(num);reinterpret_cast强制类型转换用于指针类型转换例子:cha
2017-02-09 10:34:51 129
原创 c++学习1
(1)c++之父:本贾斯.斯特劳斯特卢普(2)c++语言的标准:c++98 c++03 c++11 c++14(3)c++集成开发工具(IDE):Eclipse CDT(Linux环境) VS(windows环境)(4)c++对c的升级(区别) c++是一种面向对象的语言,而c是面向过程的语言(5)面向对象的三大特点:继承,多态,封装 因此c++作
2017-02-07 10:08:48 147
原创 指针与数组的易错点归纳
序:指针与数组是C语言中最常见的,其不同已于前面总结过,今天我写一些我在写C语言程序中遇到的错误,肯定不完整,但也可以作为错误总结防止再犯。在写之前,首先我要总结一点,那就是数组远比指针可靠,除了发送实参和接收形参外,能用数组的尽量不要用指针。首先第一点,指针最容易出现的问题是野指针,即访问了一段非法的地址空间。通常来说,指针必须指向一段你要求指向的空间,而当你只定义一个指针却并未
2016-12-02 23:58:46 724
原创 itoa函数的实现
itoa函数在linux中并没有,所以我尝试写了一个my_itoa函数,方便调用。当然由于原有itoa存在进制转化(即第三个参数),我并没有加上,所以默认是十进制,但我将float型转字符串加了进去,功能基本实现,写的可能有点啰嗦,敬请斧正。源码附上#include #include #define MAX_SIZE 1024void my_itoa(int value_int
2016-11-30 20:41:01 224
原创 YL-56声音检测模块
YL-56可以检测声音的有无,工作在3.3-5v,灵敏度可调(通过调节电位器),该模块有三个口,VCC,GND,DQ,;有两个指示灯,一个为电源指示灯,另一个为开关指示灯(超过设定的阈值就亮),DQ没超过阈值输出高电平,超过就输出低电平。该模块相对简单,没有特定的驱动程序下面附上我写的程序(检测到高声音蜂鸣器响lcd提示)lcd库#include #include ".
2016-11-13 20:37:16 4310 6
原创 互斥锁
互斥锁初始化函数原型int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr)表头文件:#include mutex:互斥锁mutexattr:PTHREAD_MUTEX_INITIALIZER创建快速互斥锁PTHREAD_RECURSIVE_MUTEX_INITIALI
2016-11-12 23:19:47 252
原创 pthread_exit与pthread_join的区别
pthread_exit(void *ptr) 函数使线程退出,并返回一个空指针类型的值。pthread_join(pthread_t tid,void **rtval)调用此函数的进程/线程等id为tid的线程返回或被终止,并从它那里获得返回值。注意,退出函数返回的是一个空指针类型,接受函数也必须用一个指针来接收。但是函数给出的参数是接收指针的地址,即,接收到的指针值写入给出的地址处的指
2016-11-10 21:04:27 1112
转载 线程和进程的选择
我们编写程序,到底是采用多线程还是多进程?这里是有区别的,采用不同的机制能够获得的效率也不一样。如何选择适合我们自己的程序的机制呢?下面是一些常见的选择的看法,不过也只是提供给大家参考参考,具体设计的时候还是要自己处理。一个程序里面的所有的线程都在同一个运行空间中执行。而一个程序的子进程则是运行在另外的执行空间中的,这里是通过调用了exec函数来实现的。同一个进程中的某个线程的故障
2016-11-09 22:48:40 213
原创 多线性的实现
线性的创建pthread_create函数函数的作用:创建线程表头文件:#include 函数原型:int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg)函数参数:*restric
2016-11-08 18:42:42 211
原创 线程概述
1线程属于进程,是CPU调度和运行的基本单位,比进程更小。2进程不拥有系统资源,但与该进程其他进程共享资源3使用线程的原因:(1)通过将进程分解为多个顺序线程使设计简单 (2)线程比进程更轻量级 (3)易于提高性能4线程优点(1)提高程序响应速度
2016-11-07 22:37:58 174
原创 dht11模块的学习
dht11传感器是用来测温湿度的传感器。dht模块价格相对便宜(一般在4、5元左右),所以测温湿精度性不高,温度精度大概在+-4之间,湿度精度大概在+-1之间,如果这是学习之用还是可以的。 我看过dth11的中文资料,它工作在3-5.5v,传输数据采用的是单总线,一次完整的数据传输有40bit,分别为温度整数部分+温度小数部分+湿度整数部分+湿度小数部分+8bit校验位;但在调试程序的过
2016-11-05 19:44:51 1440 2
原创 有名管道
mkfifo函数作用:创建fifo文件函数的原型:int mkfifo(const char *pathname,mode_t mode);函数的参数:pathname:文件路径mode:文件权限返回值:成功返回0,失败返回-1,错误原因存在于errno中#include#include #include #define FIFO "/tmp/2"i
2016-10-27 13:40:31 247
原创 信号量
semget函数的作用:创建信号量函数的原型:int semget(key_t key,int nsems, int semflg)函数的参数:nsems:创建信号量的数目semflg:同open一样的权限semctl函数的作用:信号量的控制:初始化,删除函数的原型:int semctl(int semid,int semnum, int cmd,union semun
2016-10-26 16:48:43 314
原创 消息队列
msgsnd函数的作用:写数据到消息队列函数的原型:int msgsnd(int msgid,const void *msggp,size_t int msgflg)函数的参数:msggp 消息、结构msgsize:消息的字节数msgflg:IPC_NOWAIT(写不进去直接返回)O:知道能写进去消息为止omsgctl函数的作用:控制消息队列,可以删除消息函数的
2016-10-25 21:11:53 193
树莓派tea5767收音机
2019-09-28
基金信息助手
2018-11-18
二维码生成和扫描器2
2017-11-13
二维码生成和扫描器
2017-11-12
openv人脸模板采集程序
2017-08-25
opencv3.3 vs2010 debug版(Cmake编译 包含contrib)
2017-08-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人