- 博客(76)
- 资源 (5)
- 收藏
- 关注
原创 POSIX线程(三)linux下c++线程池代码示例
文章目录基础的线程池demomain.cppPthreadPool.hPthreadPool.cpp线程池理论部分可参考其他文章:linux线程池的实现——bobo基础的线程池demo本文仅放上一个基础的线程池demo:分为三个文件:main.cppPthreadPool.cppPthreadPool.h后两个文件写线程池相关应用接口main.cpp#include <iostream>#include <pthread.h>//pthread_create
2020-08-12 12:56:54
219
原创 POSIX线程(二)互斥量mutex、条件变量cond,联合使用代码和理解
文章目录互斥量mutex对互斥量的操作函数pthread_mutex_init对互斥量的初始化pthread_mutex_destroy销毁一个互斥锁pthread_mutex_lock加锁pthread_mutex_trylock尝试加锁pthread_mutex_unlock解锁代码示例条件变量cond条件变量是什么示例代码几个疑问为什么pthread_cond_wait需要加锁?互斥量mutex互斥量是实现多线程程序中的同步访问的一种手段,它实现线程访问资源的互斥互斥量是一个类对象,使用互斥量
2020-08-11 10:47:44
1000
转载 No manual entry for pthread_mutex_init解决办法
命令行:man pthread_mutex_init提示:No manual entryfor pthread_mutex_init解决方案:命令:sudo apt-get install manpages-posix manpages-posix-dev
2020-08-09 15:22:16
760
原创 POSIX线程(一)linux线程概述、线程基础函数(pthread_create、exit、join)
文章目录线程概述实战注意事项线程系统函数pthread_createpthread_exitpthread_join代码实例线程概述栗子:有一家大工厂,有很多个厂房,每一个厂房都可以独立工作,多个厂房则效率更高。厂商根据市场需求调整要开几间厂房进行生产,如果需求不高,就保存一间厂房生产即可,需求高就多开几间。这里:一个厂房——一个进程一个厂房里面的一个工序——线程进程是操作系统中的一个基本单元,我们整个系统是由无数个进程组成线程是操作系统运行的最小单元,每一个进程如果不做处理,默认就有一个
2020-08-09 11:28:13
474
原创 服务器和客户端结构体定义内容顺序不一致导致的问题
由于增加一个数据info_type,而结构体定义顺序不一致,发现的这个问题,无意中修改定义如下:在服务器如下定义typedef struct chat{ int chat_type; //群聊0 还是私聊1 int info_type;//第二个 int user_id; char user_name[30]; char chat_msg[300];}CHAT_PACKET;在客户端如下定义:typedef struct chat{ int chat_type; //群聊
2020-08-08 11:15:29
862
原创 linux socket 程序被ctrl+c或者异常终止,再次启动报bind err:: Address already in use解决办法
linux socket 程序被ctrl+c或者异常终止,再次起程序时提示该端口号已被绑定bind err:: Address already in use原因在服务端终止之后,会有一个TIME_WAIT的状态,持续2-4分钟,再次打开会出现绑定bind失败解决方法在bind函数前增加以下代码: int mw_optval = 1; setsockopt(server_sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&mw_optval,sizeof(
2020-08-06 10:54:29
1684
原创 SOCKET(一)基本TCP套接字编程(socket,bind,listen,accept,connect函数)
文章目录概述socket函数bind函数(服务端)字节转换函数地址格式转换函数listen函数(服务端)accept函数(服务端)connect函数(客户端)write函数read函数close函数getsockname和getpeername函数代码实例服务端代码客户端代码概述TCP套接字的编程流程/函数框架:TCP套接字程序编写流程:创建套接字——socket将套接字与地址和端口捆绑socket函数#include <sys/socket.h>int socket(i
2020-08-05 21:42:39
2012
3
原创 stm32探索版学习随笔(三)——GPIO资源,工作模式,寄存器
详见【正点原子】 手把手教你学STM32 系列视频之 STM32F4-基于探索者F407文章目录管脚查询GPIO的8种工作模式:4种输入模式4种输出模式GPIO相关配置寄存器管脚查询GPIO可以通过ST官方的数据手册《STM32F4ZGT6.pdf》p46页开始获得每一个管脚的详细功能解释,截取一页做例子:FT代表5v容忍GPIO的8种工作模式:4种输入模式浮空下半部分电路不工作用于AD转换,输入到ADC4种输出模式2的输出控制电路输入1,NMOS不导通输出1则4567
2020-08-02 17:09:44
245
原创 stm32探索版学习随笔(二)——ISP串口下载
详见【正点原子】 手把手教你学STM32 系列视频之 STM32F4-基于探索者F407注意点笔记:串口下载时(flymcu/stc-isp/mcuisp)下载对于F4板子波特率选择且不要超过76800,对于F1板子则任意F4串口下载比较慢,推荐买个仿真器当是最小系统板板,串口下载时应该的接线方法:对于开发板一键下载就不用换boot跳线帽:...
2020-08-02 11:43:00
386
原创 IPC之共享内存(shmget函数、shmat函数、shmdt函数)及其代码示例——linux系统编程
文章目录共享内存介绍shmget:创建共享内存shmat:将创建好的共享内存连接到某个进程,并指定内存空间shmdt:脱钩函数,把共享内存与当前进程脱离开代码实例共享内存介绍共享内存是IPC中效率最高的一个,它是原理是linux内核在内存中开辟一个空间,给进程进行读写。每个进程都会通过API函数,把这块linux内核中的内存映射到自己的进程空间里面来,是映射的,虚拟的,不是实际在进程内存中。通过这种方法来达到进程间共享数据目的• 共享内存使用的函数与信号量的很相似,涉及到的函数如下void *s
2020-08-01 22:36:44
4252
1
原创 IPC之消息队列(msget函数、msgsnd函数、msgrcv函数)及其代码示例——linux系统编程
文章目录消息队列介绍msgget:创建和访问一个消息队列msgsnd:发送信息,把一条消息添加到消息队列里去msgrcv:从一个消息队列里检索(接收)消息代码实例消息队列介绍消息队列:IPC之一内核开辟的一个队列,进程可以通过调用系统API方式调用消息队列函数,给内核消息队列发送或者接收数据涉及函数:包含头文件:<sys/msg.h><sys/types.h>和<sys/ipc.h>int msgctl(int msqid, int cmd, struct m
2020-08-01 22:19:03
7450
2
原创 管道(三)——有名管道FIFO、mkfifo函数——linux系统编程
文章目录引入命名管道FIFO、创建mkfifoFIFO读写规则引入pipe最大的劣势就是只能用于有共同祖先的各个进程之间,无法在没有亲缘关系的两个进程间创建一个管道并将它用作IPC通道。FIFO解决了这一点,它通过文件系统中的路径名作为名字来指定访问的进程。命名管道FIFO、创建mkfifo匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。FIFO文件在磁盘上没有数据块,仅用来标
2020-07-31 15:56:32
3845
1
原创 管道(二)——管道读写规则、管道容量Pipe Capacity、原子性PIPE_BUF——linux系统编程
文章目录4种情况下的管道读写规则当没有数据可读(若父进程不写而子进程读)当管道满(若父进程写而子进程不读)管道容量Pipe Capacity若(父进程)写端突然关闭若(子进程)读端突然关闭linux写入原子性问题本人的《APUE》《UNPv12》到啦!希望博文质量能有所提高!4种情况下的管道读写规则我们用代码简单试验在一般情况下(O_NONBLOCK disable,默认阻塞)的4种情况:1.当没有数据可读2.当管道满的时候3.所有管道读端对应的文件描述符被关闭4.写端对应的文件描述符被关闭
2020-07-31 14:53:53
2162
原创 stm32探索版学习随笔(一)——stm32F407ZGT6简介和资源
在这个栏目下简单地记录一些重要但是容易忘的东西~只是简单随笔,内容并不全哈学习课程:【正点原子】 手把手教你学STM32 系列视频之 STM32F4-基于探索者F407F407ZGT6
2020-07-30 12:05:23
5594
原创 C51通过if(TF0==1)省去写中断处理函数的方法
在C51下我们要使用定时器中断,通常需要写定时器是初始化函数和对应定时器是中断处理函数,但是有些时候逻辑功能并不复杂,可以将中断处理函数的内容写到main函数中这里就是一种方法,通过检测TCON寄存器的TF0位——定时器0中断溢出标志位,监测定时器溢出情况,从而判断是否印发了中断,并在if语句中写中断需要命令即可一个例子:void Timer0Init(){ TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0XFC; //给定时器赋初值,定时1ms T
2020-07-29 16:06:01
1518
原创 管道(一)——匿名管道、pipe函数——linux系统编程
文章目录进程间通讯IPC什么是管道、管道的特点管道的创建——pipe函数代码实验基础功能若父进程==不写==而子进程读若父进程写而子进程==不读==若父进程==写端突然关闭==?若子进程==读端突然关闭==?管道的阻塞问题总结进程间通讯IPC上一讲我们说到信号,进程间的整型数据可以通过信号进行传递,但是其他信号(例如结构体)信号就不够用了。而在进程中我们学到每个进程都有各自独立的地址空间,进程互相不能访问,所以进程间若想进行数据交换,就必须通过内核。在内核中开辟一块缓冲区,用于传递信号的写入和读出,这种
2020-07-29 11:19:06
358
原创 信号(三)——阻塞(信号屏蔽)与未决、sigset_t信号集、sigprocmask 和 sigpending 函数——linux系统编程
文章目录信号在内核中的表示:递达(Delivery)、未决(Pending)、阻塞(Block)sigset_t未决信号集sigprocmask函数sigpending函数信号在内核中的表示:递达(Delivery)、未决(Pending)、阻塞(Block)递达(Delivery):执行信号的动作sigset_t未决信号集sigprocmask函数sigpending函数...
2020-07-26 23:36:59
1822
转载 markdown文字颜色、大小、字体与背景色的设置
CSDN的markdown编辑器是其衍生版本,扩展了Markdown的功能(如表格、脚注、内嵌HTML等等)就是内嵌HTML,接下来要讲的功能就需要使用内嵌HTML的方法来实现。1.文字颜色<font color="#dd0000">红色文字</font><br />效果:红色文字具体的颜色你可以去网上去查,采用的是RGB颜色这里有个对照:http://www.bejson.com/convert/rgbhex/2.背景颜色<table>&l
2020-07-26 17:46:40
470
原创 信号(二)——进程间数据传递sigaction函数(sigaction结构体、siginfo_t 结构体)、sigqueue函数(sigval联合体)、信号的顺序响应问题——linux系统编程
文章目录sigaction信号安装函数sigaction 结构体siginfo_t 结构体sigqueue信号发送函数sigval联合体代码示例上一篇讲到信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题。Linux在支持新版本的信号安装函数sigation()以及信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。kill+signal与sigqueue+sigaction的主要差别体现
2020-07-26 15:58:13
5950
1
原创 信号(一)——简介、kill、signal、可/不可靠信号、实时/非实时信号——linux系统编程
文章目录linux的信号简介传统信号收发对:kill+signalkill——信号的软件产生signal——安装信号接收可带值的信号收发对:sigqueue+sigactionsigqueuesigactionlinux的信号简介传统信号收发对:kill+signalkill——信号的软件产生signal——安装信号接收可带值的信号收发对:sigqueue+sigactionsigqueuesigaction...
2020-07-26 10:07:25
1088
原创 进程——fork函数用法、特性及代码实例——linux系统编程
文章目录fork函数概述查看进程情况——getpid函数并发执行特性数据内存与地址空间问题创建多个子进程问题进程结束和退出问题fork函数概述首先来看官方man:NAME fork - create a child processSYNOPSIS #include <unistd.h> pid_t fork(void);DESCRIPTION fork() creates a new process by duplicating the
2020-07-22 11:41:26
454
1
原创 I2C概念部分课堂随笔——《ARM微控制器与嵌入式系统》
文章目录概况线与I2C优点规范(通信协议)数据帧高阶内容:重复起始和子地址概况freescale——SPInxp——i2c特性:串行,同步,单端,双向(但非双工,需要协议),主从,总线线与引脚是开漏、开集电极的:连到同一根线上的设备,其中只要有一个设备输出为0,则被下拉到地,线上电压都变成逻辑0内部就是一个对地导通开关也就是:大家都是1才是1,任何一个为0则都是0I2C优点方便多个设备读写规范(通信协议)i2c是电平有效的,注意spi是触发沿有效默认仅在时钟信号为低时才能
2020-07-21 15:15:53
217
原创 UART/SCI概念部分课堂随笔——《ARM微控制器与嵌入式系统》
文章目录异步串行通讯UART=SCI概况数据帧波特率误差问题外设:RS-232与USB虚拟串口通讯协议概览:异步串行通讯UART=SCI概况由于历史原因有两个称呼但是指的是同一个东西intel:UART moto:SCI特性:串行、异步、点对点、全双工、对等应用:手机短信,GPS双方通讯:没有共同时钟,约定速率,需要三根线(收、发、共地)数据帧采用数据帧的格式,数据通过一个一个帧封装起来,以帧传输空闲位默认为1,起始位为低,避免了误差的累积最低位:LSB——Least sig
2020-07-20 22:18:39
1000
原创 c++赋值(赋值为函数返回值)语句的返回值问题
不知道为什么,之前一直脑子里有一个误解,赋值语句的返回值应该是1(成功赋值)或0(赋值失败)今天其实在学linux的时候突然揣摩了一下代码才发现这个问题:if ((dir = opendir("/home/ljz/Desktop")) == NULL)opendir返回空说明目录打开失败这句代码里面==NULL的判断在(dir = opendir("/home/ljz/Desktop"))这个赋值语句之外判断,这说明了赋值语句的返回值就是变量所赋的值所以才能这么写基础不牢地动山摇呀QAQ
2020-07-19 16:05:49
875
原创 linux两种开发环境的搭建与代码实例(ubuntu内code::blocks与Windows内vs2013+visualGDB)以文件io为例
本文主要对两种linux开发环境的搭建和使用进行简要记录,以打开和读并输出一个文件的内容为代码示例。目的是对linux开发环境和文件io有一个基础认识文章目录法一:ubuntu内code::blocks开发环境搭建步骤项目开发基础操作法二:Windows内vs+visualGDB开发环境搭建步骤项目开发基础操作法一:ubuntu内code::blocks开发笔者版本为ubuntu16.04+code::blocks13.12环境搭建步骤open Terminal 输入sudo su,然后输入密
2020-07-18 00:38:53
411
转载 74xx系列芯片类型及功能概览
74系列集成电路大致可分为6大类: 74××(标准型); 74LS××(低功耗肖特基); 74S××(肖特基); 74ALS××(先进低功耗肖特基); 74AS××(先进肖特基); 74F××(高速)。 近年来还出现了高速CMOS电路的74系列,该系列可分为3大类: HC为COMS工作电平; HCT为TTL工作电平,可与7
2020-06-18 17:21:17
4441
原创 使用pyinstaller打包含有jieba、wordcloud第三方库为exe后闪退的问题及解决方法
问题:试图将慕课上学的词云打包为一个exe文件,希望双击就可以产生图片,但是实际打包完一直会闪退,提示如下大概是缺wordcloud这个文件,经过参考这篇博文以及https://www.pianshen.com/article/996685916/解决方法如下:将wordcloud库中的stopwords文件复制一份到与exe同目录下以编辑方式打开同在wordcloud库目录下的wordcloud.py文件将第30行左右的FILE = os.path.dirname(__f
2020-05-13 22:56:26
1421
1
原创 关于程序在keilC51下报一堆error C141: syntax error near '[' ,而其他编译器通过的一个可能原因
写了一个冒泡排序,在vc等编译器下没问题,在keilC51上就疯狂报错除了少括号等基础原因外,还有一个可能是和C51的关键词重名了比如我使用的这个data,是而我定义了一个名为data的数组,导致如下一堆error结果:解决方法就是给数组换一个变量名即可这里截图就是为了展示杀千刀的keil关键词加粗的不明显,导致我刚开始没看出来…………仅以此篇纪念我浪费的2个小时QAQ附上一些C51的关键词:存储器类型定义变量时可以省略存储器类型,C51将按编译模式默认存储器类型基本数据类型
2020-05-13 11:32:46
79182
4
原创 【第九周】Python计算生态概览(一堆库介绍,多图预警)、学习总结展望——北理工Python慕课笔记
文章目录【第九周】Python计算生态概览从数据处理到人工智能Python库之数据分析Python库之数据可视化Python库之文本处理Python库之机器学习实例15:霍兰德人格分析雷达图从Web解析到网络空间Python库之网络爬虫Python库之Web信息提取这里是2020.5.12 20:34,距离本课程结课还有不到3个小时的时间,果然DDL是第一生产力呢……(我可太懒了)本周是扩展眼界,没有太大压力【第九周】Python计算生态概览从数据处理到人工智能本单元介绍下面几个方面,要求知道有
2020-05-12 22:27:12
376
2
原创 【第八周】程序设计方法学(pip安装第三方库、os库的使用)——北理工Python慕课笔记
文章目录【第八周】程序设计方法学【第八周】程序设计方法学
2020-05-11 16:23:02
782
原创 关于extern声明后,变量值和定义值不一样的问题及解决办法
软件:vc6.0语言:c问题描述:在main文件定义了一个全局变量int g_score=0;//分数在另外一个文件中声明 extern int g_score希望在含有声明extern int g_score的这个文件中对g_score进行g_score+=10操作结果发现第一次走这个语句打印出来的是11而不是10!进一步打印+=10之前的g_score,发现竟然等于1而不是主文件定义的0!解决方法:调换定义和声明,即在要操作使用g_score的这个文件中定义全局int g..
2020-05-07 21:53:55
1497
1
原创 【第七周】文件和数据格式化(读写文件、一二维数据、wordcloud库)——北理工Python慕课笔记
文章目录第七周 文件和数据格式化文件的使用实例11:自动轨迹绘制一维数据的格式化和处理二维数据的格式化和处理模块6:wordcloud库实例12:政府工作报告词云第七周 文件和数据格式化文件的使用文件的两种展示形态:文本文件和二进制文件,但都以二进制01形成存储文本文件:有统一编码二进制文件:在01之上没有任何编码以文本形式打开文件:以二进制形式打开文件:文件的打开关闭...
2020-05-05 23:19:40
682
原创 【第六周】组合数据类型:集合、序列(字符串、元组、列表)、字典——北理工Python慕课笔记
文章目录第六周 组合数据类型集合类型及操作序列类型及操作(字符串、元组、列表)元组类型及操作列表类型及操作序列应用场景实例9:基本统计值计算字典类型及操作模块5:jieba库实例10:文本词频统计三种集合数据类型:集合、序列(字符串、元组、列表)、字典第六周 组合数据类型集合类型及操作定义:唯一、无序、用{}表示因为元素唯一所以不可变,列表可改变注意set是把每一个字母当一个...
2020-05-04 21:46:36
747
原创 汇编--算术运算指令:加减乘除
文章目录加法学习来源:微机原理与接口技术——吴宁加法普通加法ADD:两个字节运算带进位的加法ADDC:多位运算,使用前要先将CF清零加一指令INC:前两条会影响全部六个标志位,这一条不会影响CF(则其后面不能跟JNC类根据CY转移类指令)INC OPRD 其中操作数不能是立即数,不能是段寄存器,常用于修改地址指针。标志位补充:...
2020-05-02 10:04:09
9040
原创 【第五周】Python函数用法(可变/选参数传递,局部变量,返回值)、lambda函数、PyInstaller库——北理工Python慕课笔记
Python慕课笔记-北京理工大学嵩天教授《Python语言程序设计》【第五周】Python函数用法(可变/选参数传递,局部变量,返回值)、lambda函数
2020-04-29 17:53:22
387
xml转cascade.zip
2020-10-22
opencv_3.4.2_Qt.rar
2020-10-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅