自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

二月红

枫叶染将红,桃花落未希

  • 博客(63)
  • 资源 (2)
  • 收藏
  • 关注

原创 线程同步(屏障)

线程同步(屏障)屏障(barrier)是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都达到某一点,然后从该点继续执行。pthread_join函数就是一种屏障,允许一个线程等待,直到另一个线程退出。但是屏障对象的概念更广,它们允许任意数量的线程等待,直到所有的线程完成处理工作,而线程不需要退出。所有线程达到屏障后可以接着工作。可以使用pthread_ba...

2018-04-08 16:36:17 2179

原创 线程同步(条件变量)

线程同步(条件变量)条件变量是线程的另一种同步机制。 条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态之前必须首先锁住互斥量。其他线程在获得互斥量之前不会察觉到这种改变,因为互斥量必须在锁定以后才能计算条件。使用条件变量前,必须先对它进行初始化。条件变量的数据类型为pthread_cond_t。它有两种初始化方式: ...

2018-04-08 09:10:09 1073

原创 线程同步(读写锁)

线程同步(读写锁)读写锁读写锁(reader-writer lock)与互斥量类似,不过读写锁允许更高的并行性。 互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。 读写锁可以有3种状态: 1、读模式下加锁状态 2、写模式下加锁状态 3、不加锁状态读写锁特点:一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁...

2018-04-07 15:07:58 738

原创 线程同步(互斥量)

线程同步(互斥量)互斥量原理:使用pthread的互斥接口来保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行设置(加锁),在访问完成后释放互斥量(解锁)。对互斥量进行加锁后,其他任何线程试图对互斥量进行再次加锁都会被阻塞,直到当前线程释放该互斥量。如果释放互斥量时,存在多个线程在阻塞等待,那么所有该锁上的阻塞线程都会变成...

2018-04-06 17:19:06 365

原创 线程的终止

线程终止进程的终止:1.进程中的任意线程调用了exit、_Exit 或者 _exit,那么整个进程就会终止。 2.如果默认的动作是终止进程,那么发送到线程的信号也会终止整个进程。线程的终止:在不终止进程的情况下停止单个线程: 1.线程可以从启动例程中返回(return),返回值是线程的退出码。 2.线程可以被同一进程中的其他线程取消。 3.线程调用pthread_e...

2018-03-30 17:13:33 290

原创 创建线程

线程的创建#include < pthread. h>int pthread_ create( pthread_ t *restrict tidp, const pthread_ attr_ t *restrict attr, void *(*start_ rtn)( void *), void *restrict arg);//若成功,返回0;否则,返回错误编码如...

2018-03-30 16:18:49 148

原创 苹果电脑MAC 在Finder里面显示隐藏文件方法

在终端里输入下面命令即可让它们显示出来。defaults write com.apple.finder AppleShowAllFiles -bool true如果想恢复隐藏,可以用这个命令:defaults write com.apple.finder AppleShowAllFiles -bool false注意:1、执行命令后需要重启 Finder 才能看到效果。   2、不要乱动不懂的隐藏文

2016-08-28 12:57:24 520

原创 对象的创建与引用计数器实现

在面向对象的编程语言中,很多语言会根据引用计数器来实现对对象的自动回收机制,就和Unix/Linux中的文件系统那样,当一个对象被另一个对象持有时,被持有的对象自身的引用计数器会加1。只要对象还被引用,即引用计数器还未被清0,那么我们对对象执行释放操作,只是将对象的引用计数器减1。直到对象的引用计数器变为0后,该对象才真正被释放。下面我们根据以上描述的原理,用C来尝试实现对象的创建、引用和释放。#i

2016-08-13 18:21:44 955

原创 多线程临界区问题及解决方法

临界区定义:函数内同时运行多个线程时引起的,由多条语句构成的代码块。 当多个线程对同一块内存空间进行操作时,就有可能产生临界区问题。下面先看一个例子:#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>#define NUM_THREAD 100void *thread_inc(void *

2016-08-08 13:15:44 6286

原创 为路径动态的分配空间

实现文件: 注意:分配的空间需要自行释放。//path_size.h#ifndef _PATH_SIZE#define _PATH_SIZEchar *path_alloc(size_t *sizep);#endif//path_size.c#include <stdio.h>#include <errno.h>#include <limits.h>#include <unistd

2016-08-02 10:19:14 394

原创 vim中显示和关闭行号

复制vim中的内容时,会把行号也复制进去,如果我们不想复制行号,可以先关闭行号,然后再复制。在命令模式下(按esc键)://关闭行号:set nonumber//开启行号:set number

2016-08-02 00:14:04 59523 2

原创 获取进程默认可以打开的最大文件描述符数

实现文件://max_fd_cnt.h#ifndef _OPEN_MAX#define _OPEN_MAXlong open_max(void);#endif//max_fd_cnt.c#include "max_fd_cnt.h"#include <errno.h>#include <limits.h>#include <unistd.h>#include <stdio.h>#i

2016-08-02 00:04:45 1387

原创 查看手册man命令后面的参数选择

man n function_name如 man 3 fopen,man 3 exit1、Standard commands (标准命令)2、System calls (系统调用)3、Library functions (库函数)4、Special devices (设备说明)5、File formats (文件格式)6、Games and toys (游戏和娱乐)7、Miscellaneous (

2016-07-24 14:59:27 1924

原创 函数指针的使用

用途:从数据层主动向GUI层更新数据Object-C 的代理Qt信号槽对象间通讯的一种机制

2016-07-17 15:45:52 224

原创 二级指针的使用

有时候,我们需要在函数体的内部申请内存空间并初始化,然后将内部申请的存储空间交付给外部指针来引用,这时候,我们可以使用二级指针作为申请空间的函数的参数来实现。

2016-07-17 15:24:41 674

原创 结构体对齐预处理指令

结构体预处理指令的使用

2016-07-17 15:22:57 438

转载 willMoveToParentViewController和didMoveToParentViewController

iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewController在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView在以前,一个UIViewController的View可能有很多小的子view。这些子view很多时候被盖在最后,我们在最外层View

2016-06-25 18:08:47 374

转载 控制器的 addChildViewController 方法

View Controller中可以添加多个sub view,在需要的时候显示出来;可以通过viewController(parent)中可以添加多个child viewController;来控制页面中的sub view,降低代码耦合度;通过切换,可以显示不同的view;,替代之前的addSubView的管理 //在parent view controller 中添加 child view con

2016-06-24 19:57:33 356

转载 iOS设备保持屏幕常亮

因为自己的应用程序运行的时候需要保持屏幕常亮,可以加入以下语句: (1)如果是在Xcode中做开发:[ [ UIApplication sharedApplication] setIdleTimerDisabled:YES ] ;设置为YES保持屏幕常亮.(2)iOS5中,可以调节亮度了,我没有试过,大家试试看[[UIScreen mainScreen]setBrightness:0.5f];

2016-06-22 14:21:50 3499

原创 gdb调试程序3

gdb 基本命令3 命令 描述 watch 设置观察点 info ( 或 i ) watchpoints 查看当前设置了哪些观察点 x 从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量接着上次的内容:修改后的代码 1 #include <stdio.h> 2 3 int main(void) 4 { 5 6

2016-06-18 22:54:04 338

原创 gdb调试程序2

gdb 基本命令 命令 描述 break ( 或b ) 行号 在某一行设置断点 break 函数名 在某个函数开头设置断点 break … if … 设置条件断点 continue (或 c) 从当前位置开始连续运行程序 delete breakpoints 断点号 删除断点 display 变量名 跟踪查看某个变量,每次停下来都显示它的值 d

2016-06-18 12:05:08 307

原创 gdb调试程序1

gdb 基本命令 命令 描述 backtrace ( 或bt ) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame (或 f) 帧编号 选择栈帧 info (或 i) locals 查看当前栈帧局部变量的值 list (或 l) 列出源代码,接着上次的位置往下列,每次列10行 list 行号 列出从第

2016-06-18 01:59:36 793

原创 静态库

静态库可以认为是一些目标代码的集合,即对多个目标代码归档到一个文件中。命名一般以”lib“开头,以”.a“结尾,如“libmycal.a”。静态库相比于动态库存在的优点是:引用了静态库的代码进行编译链接后,会将静态库的副本包含进应用程序中,这样在别的机器上运行时,就不用担心找不到库了。缺点就是:当多个应用程序调用相同的静态库时,内存中会有多个静态库的副本被载入,每个库归相应的应用程序调用,消耗内存。

2016-06-14 09:23:17 235

原创 解决UITexFiled,UITableView与手势冲突

IOS 不能触发didSelectRowAtIndexPath事件有三种可能:delegate 没有设置。可能tableview被其他控件覆盖。手势与tableview点击事件冲突对添加的手势进行设置: 1) 遵循协议:UIGestureRecognizerDelegate 2) 在添加手势时指定代理UITapGestureRecognizer *tap = [[UITapGesture

2016-06-13 13:43:07 797

原创 共享库

这里首先先说明一下装载时重定位的问题,一个程序如果没有用到任何动态库,由于已经知道了所有的代码,那么装载器在把程序载入内存的过程中就可以直接安装静态库在链接的时候定好的代码段位置直接加载进内存中的对应位置就可以了。 但是在面对动态的库的时候 ,这种方式就不行了。假设需要载入共享库A,但是在编译链接的时候使用的共享库和最后运行的不一定是同一个库,在编译期就没办法知道具体的库长度,在链接的时候就没

2016-06-13 01:15:48 268

原创 UIWebView 前进 后退 刷新 取消

前进- (IBAction)forwardButtonPush { if (self.webView.canGoForward) { [self.webView goForward]; }}后退- (IBAction)backButtonPush { if (self.webView.canGoBack) { [self.we

2016-06-11 20:38:15 402

转载 iOS中UIWebView的使用详解

iOS中UIWebView的使用详解一、初始化与三种加载方式UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种:第一种:- (void)loadRequest:(NSURLRequest *)request;这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我加载

2016-06-11 20:33:38 191

原创 解决vi中上下左右变ABCD问题

只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题。$sudo apt-get remove vim-common$sudo apt-get install vim

2016-06-09 14:59:23 2495

原创 Ubuntu网络配置

配置 /etc/network/interfaces 文件动态获取IP$sudo vim /etc/network/interfaces添加如下内容:auto eth0iface eth0 inet dhcp重启网卡$sudo service networking restart静态IP$sudo vim /etc/network/interfaces添加如下内容:auto eth

2016-06-09 14:49:55 209

原创 C实现复制文件

代码//mycp.c 1 #include <unistd.h> 2 #include <sys/stat.h> 3 #include <sys/types.h> 4 #include <fcntl.h> 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 #define SIZE 8192 9 10 int main

2016-06-09 10:32:11 1043

原创 exit( )函数与return的区别

return:表示函数返回,当main函数return时表示程序运行结束.exit():无论在哪个函数调用,都会导致程序结束。

2016-06-09 09:35:45 340

原创 Ubuntu 16.04系统默认最大打开文件数为1024个

代码证明#include <stdio.h> 2 #include <sys/types.h> 3 #include <fcntl.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6 7 int main(int argc,char *argv[]){ 8 9 int fd; 10 char name

2016-06-08 22:39:56 7860

原创 使Vim更适合编代码

方式一:在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:TAB替换为空格::set ts=4:set expandtab:%retab!空格替换为TAB::set ts=4:set noexpandta

2016-06-08 21:58:36 258

转载 iOS计算字体宽和高

给NSString写一个分类头文件#import <Foundation/Foundation.h>@interface NSString (Extension)/***返回值是该字符串所占的大小(width, height)*font : 该字符串所用的字体(字体大小不一样,显示出来的面积也不同)*maxSize : 为限制改字体的最大宽和高(如果显示一行,则宽高都设置为MAXFLOAT

2016-06-08 19:58:42 1271

原创 ASIHttpRequest框架的使用

ASIHttpRequest框架的使用使用前的注意点:ASIHttpRequest框架是在MRC环境下工作的,使用前必须将相关的文件设置为MRC编译方式.需要导入libz.tbd库,这个库是关于压缩/解压缩的类库.发送同步请求ASIHTTPRequest 默认是以get的方式来实现网络请求的.//ViewController.h#import <UIKit/UIKit.h>@interfa

2016-05-12 22:08:54 388

原创 监听网络状态的改变

监听网络状态//这是一个已经封装好的监听网络状态的文件,直接拖进来使用就行了//Reachability.h#import <Foundation/Foundation.h>#import <SystemConfiguration/SystemConfiguration.h>#import <netinet/in.h>typedef enum : NSInteger { NotRea

2016-05-11 15:25:30 1091

原创 下载文件思路

下载文件直接请求获取:这种方式会将数据全部接收回来,然后一次性存储到文件中,会出现内存峰值问题,也没有进度跟进//ViewController.h#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end//ViewController.h#import "ViewController.h"@interface

2016-05-11 14:14:58 3671

原创 动态获得类的属性来构建模型

动态获得类的属性来构建模型应用场景: 有时候我们从服务器端拿来的Json数据,其中包含很多的属性,而我们在转模型时,模型需要的属性并没有那么多,这种情况下,如果直接用KVC转模型结果会导致程序崩溃,以下是两种解决方法:简单版模型文件//YFNews.h#import <UIKit/UIKit.h>@interface YFNews : NSObject@property (nonatomic,

2016-05-07 11:39:22 568

原创 iOS开发-请求网页的两种方式

请求网页的两种方式//BNPAddExplainVC.h#import <UIKit/UIKit.h>@interface BNPAddExplainVC : UIViewController@end//BNPAddExplainVC.m#import "BNPAddExplainVC.h"#import "SVProgressHUD.h"@interface BNPAddExplainVC (

2016-05-06 11:02:15 1698

原创 往服务器发送自定义的对象

发送自定义的对象应用: 从服务器端获取的数据一般都会被转为模型,转为模型后,如果我们有需求,需要修改模型数据,然后将数据重新上传给服务器.那么,我们应该怎样将模型发送到服务器呢?核心:将模型转为字典,转换成功后,接下来的步骤就是前文中所讲的给服务器发送JSON数据了.模型文件//HMProduct.h#import <UIKit/UIKit.h>@interface HMProduct : NS

2016-05-04 23:36:34 308

ASIHttpRequest网络请求框架

全称是ASIHTTPRequest,外号“HTTP终结者”,可以实现http网络请求,功能十分强大。

2016-05-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除