摘要:在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参数 如果创建线程失败,返回值是一个错误码,错误码通过返回值返回,我们要进行错误检查就检查函数的返回值
阅读全文
摘要:进程是程序的一次动态执行的过程,进程是短暂的。 一个程序可以对应多个进程,可以打开多个记事本程序,存在多个进程。 线程是进程内部中的控制序列,一个进程至少有一个执行线路。 一个进程可以存在多个线程
阅读全文
摘要:当客户端调用close函数的时候,服务器的read函数读到的数据是0读到文件结束通知,表示对端关闭了tcp连接 我们现实实现下面的功能: 1、tcp客户端从标准的输入流中得到输入数据发送到服务器,服务器收到数据之后,不做任何改变,将书法返回给客户端,客户端收到服务器的数据之后,在标准输出流中输出 上
阅读全文
摘要:上面是对应的IpV4的地址结构: sin_len整个结构的大小 sin_family协议族,对应Tcp固定为AF_INET,除了tcp协议外还支持unix域协议等 sin_port socket通信的端口 sin_addr是一个无符号的32位的网络字节地址 上面的结构体仅仅支持IPv4地址协议,如果
阅读全文
摘要:整个工程的项目如下: 1、项目的思路是在activity中启动MyService这个服务,在服务中调用 activity的代码: 我们来看看本地native层实现的代码: 第一种方式: 第二种方式: 注意点: 程序代码的下载地址是:
阅读全文
摘要:我们实现下面的一个功能: 1、首先在java层传递一个字符串到c层,c层首先将jstring转换成char*类型,然后将两个字符串相加,然后再再将char*类型转换成jstring,在上层显示出来 我们来看底层程序的代码: 这里一定要注意strcat和strcpy的使用方式: 上面的代码还有一个致命
阅读全文
摘要:我们来看底层native层c的代码: 我们来来看上层activity代码的调用: 我们上层传入的字符串是数子和英文的组合的时候:我们来看底层的打印日志 06-22 15:57:15.433 5863-5863/? E/Native: 123456789:中国无论我的数据节点是就1555556 我们来
阅读全文
摘要:1 添加ndk对log支持若需要添加ndk对log的支持,只需要通过以下2步即可实现。 1.1 修改Android.mk如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog如生成的库文件是“.a文件”
阅读全文
摘要:c语言中realloc()函数解析 真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚。 realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。 如果将
阅读全文
摘要:1、学习教程参考了杨光福 android jni Android视频《JNI》 http://edu.csdn.net/course/detail/3235/54186?auto_start=1 java的基本数据类型和c语音不同的地方 一、数据类型与“模子”short、int、long、char、
阅读全文
摘要:1、参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2、参看博客: JNI层线程回调Java函数关键点及示例 http://blog.csdn.net/fu_shuwu/article/detail
阅读全文
摘要:一、安装mysql 1. 安装需要使用root账号,如果不会设置root账号的请自行google。安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了。 2. 以上3个软件包安装完成后,使用如下命令查询是否安装成功: 查询结果如下图所示,表示安装成功。 从任何主机上使用root用
阅读全文
摘要:视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够
阅读全文
摘要:通过上面的分析我们已经对循环队列很了解了,现在我们来学习下循环队列的实现形式 1、代码使用数组现实循环队列
阅读全文
摘要:上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时pFont的值不为null 1、下面分析下如何向队列中添加元素 我们添加元素的时候只有在pRear的地
阅读全文
摘要:队列是一种可以实现一个先进先出的存储结构 什么是队列? 队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。 栈,只能在栈顶进行操作,队列是一端进入,一端输出 队列也是头部和尾部 rea
阅读全文
摘要:pBottom执行栈底有效元素的前一个节点,该节点没有存储有效数据,这样设计是便于栈的管理,向链表一样pHead指向链表的第一个节点,该节点是不存储有效数据的 pTop执行栈顶最新的节点 如果pTop和pBottom的值一样,说明栈是空的 经过初始化栈之后,栈的结构是: 向栈中添加一个数据 所以pB
阅读全文
摘要:栈的分类: 栈可以分为静态栈和动态栈 静态栈:要删除先删除4才能删除3,以数组为数据结构 动态栈:以链表作为数据结构,在实际中使用动态栈比较多
阅读全文
摘要:上面的局部变量 i int*p中的p指针变量,是在栈中分配的,malloc申请的内存是在堆中分配的,动态申请的都在堆中分配的。 栈是一种数据存储的结果,先进后出的数据结构。
阅读全文
摘要:#include #include #include #include typedef struct Node{ int data;//数据源 struct Node* pNext;//指针域 }NODE,*PNODE; // NODE等价于struct Node,PNODE等价于struct Node*; //函数的声明 //创建一个非循环的链表 PNODE...
阅读全文
摘要:#include #include typedef struct Node{ int data;//数据源 struct Node* pNext;//指针域 }NODE,*PNODE; // NODE等价于struct Node,PNODE等价于struct Node*; //函数的声明 //创建一个非循环的链表 PNODE create_list(void){ ...
阅读全文
摘要:创建一个非循环的链表 我们来看下程序运行的效果 上面创建的是一个非循环的单项列表,现在要创建一个循环的单项列表 我们都知道,单向链表最后指向为NULL,也就是为空,那单向循环链表就是不指向为NULL了,指向头节点,所以下面这个程序运行结果就是,你将会看到遍历链表的时候就是一个死循环,因为它不指向为N
阅读全文
摘要:onLayout设置子控件的位置,对应一些普通的控件例如Button、TextView等控件,不存在子控件,所以可以不用复写该方法。 向线性布局、相对布局等存在子控件,可以覆写该方法去控制子控件的位置。 1、第一步首先创建一个类继承ViewGroup 2、在该group添加一个TextView,手机
阅读全文
摘要:1、自定义控件首先定义一个类继承View 有时,Android系统控件无法满足我们的需求,因此有必要自定义View。具体方法参见官方开发文档:http://developer.android.com/guide/topics/ui/custom-components.html 一般来说,自定义控件都
阅读全文
摘要:1、android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity。 主要解决下面的问题:对应的四种启动模式: 1、界面1去启动界面2,在界面2中再去启动界面1,是新创建一个界面1的实例,还是使用后来栈中的已经存在
阅读全文