- 博客(38)
- 资源 (6)
- 收藏
- 关注
转载 回调函数,钩子函数,注册,简析及实例
本文转载自:DyLan985,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/sunstars2009918/article/details/39340449感谢原作者的辛勤工作!原文内容:钩子函数、回调函数、注册函数,挂钩子这些我们代码中经常涉及到的东西,是否已经困扰你很久了?它们究竟是怎么回事,究竟...
2019-12-06 16:45:42
979
原创 用Arduino做一个能发射水弹的遥控小车
两年前做了个遥控水弹车,玩了几天送人了,今天突然发现有不少人感兴趣,索性直接把配件和源码都公布出来,好东西要大家一起分享嘛。什么?看图没意思?这里有视频哦,别忘了点赞投币哦 ヽ( ̄▽ ̄)وhttps://www.bilibili.com/video/av61043042所需所有材料如下:单个配件的链接就不发了,都是从万能的某宝买的,避免广告嫌疑就不直接给链接了。教程...
2019-07-27 22:00:21
4075
2
原创 TCP IP网络编程:第18章 多线程服务器端的实现
多线程模型相比多进程模型有如下优势:上下文切换时不需要切换数据区和堆,减少了上下文切换的开销 可以利用数据区和堆区交换数据进程:在操作系统构成单独执行流的单位线程:在进程构成单独执行流的单位线程的创建和执行流程#include <pthread.h>int pthread_create( pthread_t* restrict thread, ...
2019-05-08 10:17:16
235
翻译 TCP IP网络编程:第17章 优于select的epoll
本章将介绍比select速度更快的epoll方法一、基于select的I/O复用技术速度慢的原因调用select函数后一般都有一个针对所有文件描述符的循环语句 每次调用select函数时都需要向该函数传递监视对象信息二、select相比epoll的优点: 大部分操作系统都支持select函数,而epoll函数只在Linux系统下提供支持所以,在服务器接入者少且要求...
2019-05-07 16:08:49
167
原创 Ubuntu18.04 N卡笔记本不能调亮度问题解决办法
本人是华硕笔记本,Nvidia GTX1060显卡。安装ubuntu18.04之后,有亮度调节滑动条,但是调节滑动条屏幕亮度还是保持在100%。多种方法尝试后无效,包括修改Grub,更新内核,最终通过安装了一个“Brightness Controller”解决安装方法如下:$ sudo add-apt-repository ppa:apandada1/brightness-...
2019-04-29 11:40:52
4907
4
翻译 TCP IP网络编程:第12章 I/O复用(select的简单使用)
上一章介绍了使用多进程构建并发服务器的方法。该方法虽然优秀,但并非适用于所有情况,因为创建大量的新进程需要大量的运算和内存空间。而且由于每个进程具有独立的内存空间。所以相互之间的数据交换也较为复杂。本章将采用I/O复用技术,在不创建进程的同时向多个客户端提供服务。12. 理解select函数并实现服务器端运用select函数是最具代表性的实现复用服务器端的方法12.1 sele...
2019-04-18 16:35:44
403
原创 TCP IP网络编程:第11章 进程间通信
1. 管道#include <unistd.h>int pipe(int fds[2]);// 成功返回0,失败返回-1fd[1]指向输入端的文件描述符,fd[0]指向输出端文件描述符。下面以一个程序示例展示管道的使用方法:#include <stdio.h>#include <unistd.h>#include <sy...
2019-04-17 14:44:54
144
原创 TCP IP网络编程:第10章 多进程服务器端
1. 并发服务器端的实现方法 (1)多进程服务器:通过创建多个进程提供服务 (2)多路复用服务器:通过捆绑并统一管理I/O对象提供服务器 (3)多线程服务器:通过生成与客户端等量的线程提供服务2. 通过调用fork函数创建进程#include <unistd.h>pid_t fork(void); // 成功返回进程ID,失败返...
2019-04-17 12:00:40
2143
4
翻译 TCP IP网络编程:第6章 基于UDP的服务器端/客户端
1.1 基于UDP的数据I/O函数发送:#include <sys/socket.h>ssize_t sendto( int sock, // 用于传输数据的UDP套接字文件描述符 void *buff, // 保存待传输数据的缓冲地址值 ...
2019-04-10 15:16:20
124
原创 TCP IP网络编程:第4章 基于TCP的服务器/客户端(1)
1.1 TCP服务器端的默认函数调用顺序:TCP服务器函数调用顺序上一章讲解了:调用socket函数创建套接字 声明并初始化地址信息结构体变量 调用bind函数向套接字分配地址下面将讲解之后的几个过程1.2进入等待连接请求状态#include <sys/socket.h>int listen(int sock, int backlog); ...
2019-04-09 17:01:46
266
原创 TCP IP网络编程:第3章 套接字地址结构
1.1 IPv4的结构体定义如下:struct sockaddr_in{ sa_family_t sin_family; // 地址族(Address Family) uint16_t sin_port; // 16位TCP/UDP端口号 struct in_addr sin_addr; // 32位IP...
2019-04-09 11:22:56
405
原创 UNIX网络编程:第2章 传输层:TCP、UDP
2.6 TCP连接的建立和终止2.6.1 三路握手TCP三次握手 (1)连接前准备:服务端通过调用socket、bind、listen准备好接受外来的连接。 通常,我们会在listen之后立刻调用accept,accept会从已完成三路握手的队列中取走一个。如果当前没有可取的,则进入阻塞状态,直到有三路握手完成,则取出,程序继续向下执行。 ...
2019-04-06 15:15:15
155
原创 UNIX网络编程:第1章 一个简单的时间获取客户程序+服务程序
客户程序:// 1.2 一个简单的时间获取客户程序// timeget.cpp#include <netinet/in.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <sys/soc...
2019-04-05 16:18:13
260
原创 UNIX网络编程:第4章 基本TCP套接字编程
4.1 概述本章讲解编写一个完整的TCP客户/服务器程序所需要的基本套接字函数,为下一章编写客户/服务器程序及其扩展做准备。基本TCP客户/服务器程序的而套接字调用流程图如下:4.2 socket函数为了执行网络I/O,一个进程必须做的第一件事情就是调用socket函数#include <sys/socket.h>int socket(int famil...
2019-04-04 13:23:35
178
翻译 C++ Primer Rush 2.4 const限定符
有时我们希望定义这样一种变量,它的值不能被改变。为了满足这一要求,可以用关键字 const 对变量的类型加以限定:const int bufSize = 512; // 输入缓冲区大小这样就把 bufSize 定义成了一个常量。任何试图为bufSize赋值的行为都将引发错误。 当以编译时初始化的方式定义一个 const 对象时,编译器将在编译过程中把用到该变量的地方都替换成...
2018-12-27 20:19:04
175
翻译 C++ Primer Rush 2.3 复合类型
复合类型(compound type)是指基于其他类型定义的类型。C++语言有几种复合类型,本章将介绍其中的两种:引用和指针。2.3.1 引用引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:int ival = 1024;int &refVal = iv...
2018-12-27 18:15:53
341
翻译 C++ Primer Rush 2.1基本内置类型
2.1 基本内置类型C++定义了一套包括算数类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算数类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时,使用空类型作为返回类型。2.1.1算数类型算数类型分为两类:整型(integral type,包括字符和布尔类型在内)和浮点型。算数...
2018-12-26 21:00:28
280
原创 第三章 Python基础
3.1变量、值和类型prompt_text = "Enter a number:"user_in = input(prompt_text)user_num = int(user_in)for i in range(1,10): print(i, " times ", user_num, " is ", i*user_num)even = (user_num %...
2016-05-15 21:43:20
369
原创 第二章 Python简介
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">为了督促自己学习,我将把自己学习树莓派Python编程的过程中的主要内容以博客的形式展现给大家,本篇博文及后续博文中大部分源码参考自《树莓派Python编程指南》这本书,有意购买者请支持正版...
2016-05-14 14:51:18
625
原创 C#学习之路,学习笔记 第九章 继承 9.2由基类创建派生类
// 试一试:有Vertebral类派生Mammal类using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _9._2由基类创建派生类{ class Program { static void Main(string[] ar
2015-11-18 21:34:47
559
转载 C#学习之路,学习笔记 第八章 8.4重载
class Complex{题外:需要注意的是,这里的Complex类的成员函数的返回值是Complex类型
2015-11-04 21:32:35
300
原创 C#学习之路,学习笔记 第八章 8.5this关键字 和 8.6索引
8.5 this关键字 :using System;using System.Collections.Generic;using System.Linq;using System.Text;//在类外要通过类的对象名来访问类的成员,但在类的定义代码中,可以直接使用所有成员。//比如Cat类的内部可以直接使用变量name,在类外则要通过对象名引用,如Kitty.name。//其实每个对
2015-11-04 21:16:52
420
原创 C#学习之路,学习笔记 第八章 面向对象编程:类和对象(二)8.3.1const常量 和 8.3.2readonly常量
const常量://const常量有两个优点,一个是由于使用了有意义的名称,和数字相比,const常量更易阅读和修改;//第二个优点是由于编译器保证它的值在程序运行过程中保持固定不变,和变量相比,const更健壮using System;using System.Collections.Generic;using System.Linq;using System.Text;/
2015-11-04 21:12:12
441
原创 C#学习之路,学习笔记 第13章 Windows窗体编程 13.4超链接标签(LinkLabel)
C#学习之路,学习笔记 第13章 Windows窗体编程 13.4超链接标签(LinkLabel) private void driveLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { driveLinkLabel.LinkVisited = true; System.Diagnostics.Process.Start(@"C:\");
2015-11-03 22:00:50
595
原创 C#学习之路,学习笔记 第七章 面向对象编程:类和对象(一)7.8实战演练:编写Time()类
Time.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _7._8实战演练_Time类{ class Time { //下面为私有成员// private int hour; //私有
2015-10-31 21:19:42
513
原创 C#学习之路,学习笔记 第七章 面向对象编程:类和对象(一)
Cat.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _7HelloClass{ class Cat { //7.1定义类// //成员变量(字段) public string
2015-10-31 16:40:22
503
原创 C#学习之路,学习笔记 第六章 函数
using System;using System.Collections.Generic;using System.Linq;using System.Text;//函数的命名方式:.NET推荐采用PascalCasing形式为函数名,即所有单词首字母大写//6.4.1值传递namespace _6函数{ class Program { /
2015-10-31 14:56:42
377
原创 C#学习之路,学习笔记 第四章 流程控制
//循环语句深化练习,分形图(factal) double x0, y0; //原始点坐标 double x1, y1; //Z(n-1)的实部和虚部 double x2, y2; //Z(n)的实部和虚部 double NN; //横的平方 int n; //记录迭代次数 //用双层for语句遍历所有点 f
2015-10-06 20:27:24
346
原创 C#学习之路,学习笔记 第三章 运算符和表达式(运算符、优先级、类型转换)
C#学习之路,学习笔记 第三章 运算符和表达式(运算符、优先级、类型转换)
2015-10-06 19:08:41
480
原创 C#学习之路,学习笔记 2.6 变量的命名规则、常量 及 关键字
一、C#中变量的命名规则 1、变量的第一个字符必须是字母、下划线或@; 2、其后的字符可以是字母、数字或下划线; 3、变量不能喝关键字重名。2、const常量 我们可以用const定义一个符号常量,该常量只允许在声明的时候赋值,在程序运行过程中不能改变它的值。如果你在程序 运行中试图改变该值,编译器将报错,相比定义成变量而言,使用const常量可以增加程序的健壮性。 当我们需要多次使用同一个常量时,可以将其定义为const型,使程序更容易维护。
2015-10-03 00:37:47
1305
原创 C#学习之路,学习笔记 2.5 +运算符 与 变量的格式化输出
+运算符 与 变量的格式化输出//练一练:格式字符串 //(1)设pi=3.1415926,分别用C,F,G,N,P格式输出,观察结果 double pi = 3.1415926; Console.WriteLine("C5: {0:C5}", pi); //本地货币格式 Console.WriteLine("F1: {0:F1}", pi); //控制小数位数 Console.
2015-10-03 00:31:02
533
原创 C#学习之路 , 学习笔记 2.4 转义字符 和 @控制符
/为了灵活的控制文本格式,C#中定义了许多转义字符,这些字符都以“\”开头, //如“\n”换行符,就是一个我们经常会用到的转义字符。 //需要注意的是:当运行如下语句时: //Console.WriteLine("C:\windows\points "); //会出现编译错误,原因是“\”已被用作标记转义字符,要输出转义字符,必须用它的转义字符“\\” //如下
2015-10-02 21:07:33
479
原创 C#学习之路,学习笔记 2.3 ASCLL编码和Unicode编码
/ASCll码,(美国信息交换标准版)。使用7位2进制数来表示128个字符 //0~30分给了控制字符,32~36分给了可打印字符,127分配给了DELETE命令 //编写程序查看字符A的ASCLL码 int ch = (int)'A'; Console.WriteLine("A: {0}\n", ch); //用ASCLL码的十六进制形式直接输出ASCLL码代表的字符
2015-10-02 20:05:55
676
原创 C#学习之路,学习笔记 2.2 字符、字符串、数字的初始化与读取
//字符 //观察下面三行程序,体会加引号和不加引号的区别 int balance = 1000000; Console.WriteLine("balance"); Console.WriteLine(balance); //字符和字符串 //字符:'a','b','c','6' //字符串: "asgghac", "I love you!
2015-09-30 22:45:42
573
原创 C#学习之路,学习笔记 2.1 整形、浮点型和decimal型变量
static void Main(string[] args) { //变量定义 int a = 7; int b = 2; int sum, dif, pro, quo; sum = a + b; dif = a - b; pro = a * b; quo = a / b;
2015-09-30 21:48:16
499
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人