函数调用

使用 异步多线程TCP Socket 实现进程间通信(VC 6.0 , BCB6.0调试通过)

为君一笑 提交于 2020-02-14 23:57:08
进程间通信有很多种方式,比如说 Pipe,共享内存,DDE,Socket等,关于进程通信方面的知识我在这里就不讨论了,大家可以看我博客里的另一些文章有讲...今天我们主要讨论怎么样使用Socket实现进程间通信。 本程序将使用Socket 的WSAEventSelect异步方式,使用多线程,建立一个服务器类,使用此类的时候只需要将处理数据的函数指针传给该类,进行数据处理,本例中,服务器将启动一个客户端进程,让客户端像服务器发送数据,然后服务端收到数据后将数据打印出来进!从而达到进程通信的目的,当然,如果想进行数据的特殊处理的话,只需要改写处理函就行了,因为,服务器类只是接收函数指针。 本类在C++ builder 6.0 和 VC 6.0调试通过....不过大家注意看程序注释,不同的编译器使用需要修改一点地方,程序注释说的很清楚,我就不在这里介绍了(注意BCB中包含的头文件位置,本类的头文件一定要放在最上面,因为winsock2.h的冲突问题,有关这个问题,有兴趣的朋友自己上网搜,因为时间有限,一篇文章不可能写太多的内容,请大家谅解) 下面我们先来了解一下 Socket 的异步方式 ! (程序源码示例请翻到文章尾下载) 首先,Wi ndows套接字在两种模式下执行I / O操作:锁定和非锁定。 在锁定模式下,在I / O操作完成前,执行操作的Wi nsock函数

jQuery初学者笔记 一

≡放荡痞女 提交于 2020-02-14 20:32:00
jQuery初学者笔记 一 Mirror王宇阳 by jQuery语法 jQuery语法是通过选取HTML元素,并对选取的元素进行操作 基础语法: 所有jQuery语句用“$”符号开始 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <p>点击消失</p> <p>点击消失</p> <script src="jq/jquery-3.4.1.min.js"></script> <script> $(document).ready(function(){ //固定的jQ开头 $("p").click(function(){ // 选取p标签,并绑定clisk事件 $(this).hide(); //事件触发使用hide()方法(隐藏当前标签属性) }) }) </script> </body> </html> jQuery函数位于一个document ready函数中,我们需要在js中加载该函数文档 // jQuery入口函数 $(document).ready(function(){ //jQuery代码 }); /*******************************/ $(function(){ //jQuery代码 }); 选择器语法:

对象,类、面向对象编程

非 Y 不嫁゛ 提交于 2020-02-14 20:20:12
对象: 对象是特征与技能的结合体 类 : 对象是特征与技能的结合体 , 而类则是一系列对象相同的特征与技能的结合体 强调 : 1. 对象是具体存在的事物 , 而类则一个抽象的概念 2. 站在不同的角度总结出的类与对象是不同的 在现实世界中 : 先有一个个具体存在的对象 , 然后随着人类文明的发展才总结出类的概念 在程序中 : 先定义类 , 后调用类来产生对象 class OldboyStudent:   # 相同的特征 school = 'oldboy' # 相同的技能 def choose_course(self): print('choosing course') # print('===>>>') # 类是一系列对象相同的特征 ( 变量 ) 与技能 ( 函数 ) 的结合体 , 即类体中最常见的就是变量与函数的定义 # 但其实类体中是可以存在任意 python 代码的 # 类体代码会在类定义阶段立即执行 , 会产生一个类名称空间 , 用来将类体代码执行过程中产生的名字都丢进去 , 查看 方式如下 # 总结 : #1. 类本质就是一个名称空间 , 或者说是一个用来存放变量与函数的容器 #2. 类的用途之一就是当做名称空间从其内部取出名字来使用 #3. 类的用途之二是调用类来产生对象 先定义类,后调用类来产生一个对象 #. 后调用类来产生对象 :   #

MIT 6.828 JOS/XV6 LAB4-partA

不羁岁月 提交于 2020-02-14 20:17:02
这一部分要实现的是对多核处理器的支持,然后实现系统调用只喜欢用户应用创建新的应用,而且还要实现round-robin调度算法 Multiprocessor support jos中对CPU进行了抽象 要描述一个CPU, 需要知道id,运行状态,当前正在运行的进程 所有的cpu数目放在cpus数组中 接下来则是对有多个cpu的处理器的抽象,这里使用了三个结构体,总之是比较乱,目前还不能完全看懂 多核处理器的初始化都在mp_init函数中完成,首先是调用mpconfig函数,主要功能是寻找一个MP 配置条目,然后对所有的CPU进行配置,找到启动的处理器 接下来就是要完成lapic(local advanced programmable interrupt controller) apic主要是为与其连接的处理器传送中断信号 而CPU控制与其相关联的apic需要通过读写其中的寄存器,而读写寄存器则是通过映射IO(memory mapped IO)的方法来实现的 有一些物理内存是与apic的寄存器硬件相连的,这样可以通过读写内存完成对寄存器的读写 JOS中在ULIM之上,预留了4MB的内存空间来映射APIC的寄存器 所以在使用APIC之前首先要完成映射。首先需要调用mmio_map_region函数来实现 mmio_map_region函数的实现 这部分的实现还是比较简单的

《重构:改善代码的既有设计》读书笔记

别说谁变了你拦得住时间么 提交于 2020-02-14 19:14:16
本文已同步发表在CSDN: http://blog.csdn.net/wenxin2011/article/details/50790939 第1章 重构,第一个案例 代码块俞小,代码的功能就俞容易管理,代码的处理和移动也就俞轻松。(功能也就越单一) 任何不会被修改的变量都可以被当成参数传入新的函数,至于会被修改的变量需要慎重。如果只有一个变量会被修改,可以把它当做返回值。 绝大多数情况下,函数应该放在它所使用的数据的所属对象内。 最好不要在另一个对象的属性基础上运用switch语句。如果不得不使用,也应该在对象自己的数据上使用,而不是在别人的数据上使用。 使用继承来适当组织类关系后,可以用多态取代switch语句。 一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类。 第2章 重构原则 三次法则:第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做;第三次在做类似的是,你就应该重构。事不过三,三则重构。 在重构中引入间接层的某些价值: 允许逻辑共享 分开解释意图和实现 隔离变化 封装条件逻辑 封装条件逻辑。对象有一种奇妙的机制:多态消息,可以灵活而清晰地表达条件逻辑。将条件逻辑转化为消息形式,往往能降低代码的重复、增加清晰度并提高弹性。 第3章 代码的坏味道 重复代码:设法合二为一 同一个类的两个函数还有相同的表达式

C#通过反射调用DLL内部函数

青春壹個敷衍的年華 提交于 2020-02-14 17:47:10
通过反射的方法调用外部DLL文件的函数(要事先知道DLL内的结构:命名空间、函数名称、函数参数类型等) // 依赖 using System . Reflection ; 代码 //加载Dll文件 Assembly assembly = Assembly . LoadFile ( @"dll的路径" ) ; //获取类型,参数(命名空间.类名) Type type = assembly . GetType ( "namespace.ClassName" ) ; //创建该对象的实例,object类型,参数(命名空间.类) object instance = assembly . CreateInstance ( "namespace.ClassName" ) ; //设置要调用方法中的参数类型,Type[]类型,如果有多个参数课追加 //假设要调用的方法只有一个String类型的参数 Type [ ] paramsType = new Type [ 1 ] ; paramsType [ 0 ] = Type . GetType ( "System.String" ) ; //设置要调用方法方法中的参数值,同上可追加 Object [ ] paramsObj = new Object [ 1 ] ; paramsObj [ 0 ] = "参数值" ; //执行ShowPara方法

Kubernetes源码之旅:从kubectl到API Server

半城伤御伤魂 提交于 2020-02-14 14:52:12
概述: Kubernetes项目目前依然延续着之前爆炸式的扩张。急需能够理解Kubernetes原理并且贡献代码的软件开发者。学习Kubernetes源码并不容易。Kubernetes是使用相对年轻的Go语言编写,并且拥有大量的源代码。在这个系列的多篇文章里,我将为大家深入分析Kubernetes的关键源码,以及介绍那些帮助我理解源码的技术。我的目标是提供一系列的文章,让对于Kubernetes还较为陌生的开发者能够快速学习 Kubernetes源码 。 在第一篇文章里,我会分析从运行一个简单的kubectl命令到向API Server发送REST调用的源码执行过程。在开始深入Kubernetes之前,我建议你先阅读一下Julia Evans对Kubernetes架构的高级概述分析的文章。 Kubectl命令的基本运行 Kubernetes里的命令行接口叫做kubectl。它用来控制Kubernetes集群。阅读这部分源码实现是一个好的开始。我们要追踪的命令是 kubectl create -f ——它会从文件创建K8s资源。我们要创建的资源是使用了 Nginx 基础镜像的单副本 Pod 。下面是它的yaml描述: apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 1

c++11 右值引用、移动语义和完美转发

て烟熏妆下的殇ゞ 提交于 2020-02-14 03:19:49
c++11 右值引用、移动语义和完美转发 作者:StormZhu 链接:https://www.jianshu.com/p/d19fc8447eaa c++中引入了 右值引用 和 移动语义 ,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++ 中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的 持久化对象 ,右值是指表达式结束时就不再存在的 临时对象 。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法: 看能不能对表达式取地址,如果能,则为左值,否则为右值 。 看见书上又将右值分为将亡值和纯右值。纯右值就是 c++98 标准中右值的概念,如非引用返回的函数返回的临时变量值;一些运算表达式,如1+2产生的临时变量;不跟对象关联的字面量值,如2,'c',true,"hello";这些值都不能够被取地址。 而将亡值则是 c++11 新增的和右值引用相关的表达式,这样的表达式通常时将要移动的对象、 T&& 函数返回值、 std::move() 函数的返回值等, 不懂将亡值和纯右值的区别其实没关系,统一看作右值即可,不影响使用。 示例: int i=0;// i是左值, 0是右值 class A { public: int a; }; A getTemp() {

多态、虚函数

半世苍凉 提交于 2020-02-13 23:38:38
1.( 1)派生类和基类的成员函数同名的处理 #include<iostream> #include<string> using namespace std; class A { private: int a; public: A(int x) { a = x; } void setA(int x) { a = x; } void show() { cout << "基类A=" << a << endl; } }; class C :public A { //公有继承 A private: int c; public: C(int a, int b, int c1) :A(a) { c = c1; } //派生类构造函数 void setC(int x, int y) { c = x; } void showC() { cout << "c=" << c << endl; } /*void show() { cout << "派生类C=" << c << endl; }*/ void show() { A::show(); cout << "派生类C=" << c << endl; } }; void main() { A ta(12); C tc(1, 2, 3); ta.show(); tc.show(); } ▲main函数中的ta.show() 和tc.show(

[转][c++11]我理解的右值引用、移动语义和完美转发

自作多情 提交于 2020-02-13 22:25:42
c++中引入了 右值引用 和 移动语义 ,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++ 中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的 持久化对象 ,右值是指表达式结束时就不再存在的 临时对象 。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法: 看能不能对表达式取地址,如果能,则为左值,否则为右值 。 看见书上又将右值分为将亡值和纯右值。纯右值就是 c++98 标准中右值的概念,如非引用返回的函数返回的临时变量值;一些运算表达式,如1+2产生的临时变量;不跟对象关联的字面量值,如2,'c',true,"hello";这些值都不能够被取地址。 而将亡值则是 c++11 新增的和右值引用相关的表达式,这样的表达式通常时将要移动的对象、 T&& 函数返回值、 std::move() 函数的返回值等, 不懂将亡值和纯右值的区别其实没关系,统一看作右值即可,不影响使用。 示例: int i=0;// i是左值, 0是右值 class A { public: int a; }; A getTemp() { return A(); } A a = getTemp(); // a是左值 getTemp()的返回值是右值(临时变量)   左值引用、右值引用