objective-c中线程编程一例
/*
print with threads :
print every file's first n char contents under the path that pass to this program,
format like : pwt [-h n] /some/path
*/
#import <Foundation/Foundation.h>
#define DEFAULT_N_SIZE 32
//#define MIN(x,y) (x<=y?x:y)
@class Main;
@interface OperationReadFile:NSOperation{
NSString *path;
}
@property(copy) NSString *path;
-(id)initWithPath:(NSString*)path;
@end
@interface Main:NSObject{
NSString *path;
NSOperationQueue *queue;
}
@property (copy) NSString *path;
+(id)shared;
-(void)start;
-(id)initWithPath:(NSString *)path;
-(void)print:(NSString *)str;
@end
@implementation OperationReadFile
@synthesize path;
-(id)initWithPath:(NSString*)path_v{
self = [super init];
if(self){
self.path = path_v;
}
return self;
}
NSString *head_n(NSString *str,NSUInteger n){
return [str substringToIndex:MIN(n,[str length])];
}
-(void)main{
//NSLog(@"path is %@",path);
NSString *content = [NSString stringWithContentsOfFile:path
encoding:NSASCIIStringEncoding error:NULL];
content = head_n(content,DEFAULT_N_SIZE);
NSLog(@"content:%@",content);
[[Main shared] performSelectorOnMainThread:@selector(print:)
withObject:content waitUntilDone:NO];
}
@end
@implementation Main{
NSMutableArray *files;
}
static Main *shared;
@synthesize path;
+(id)shared{
if(!shared){
NSLog(@"ERR:shared is not inited!");
}
return shared;
}
-(void)start{
for(NSString *file in files){
OperationReadFile *orf = [[OperationReadFile alloc] initWithPath:file];
[queue addOperation:orf];
}
}
-(void)print:(NSString *)str{
NSLog(@"file contents : %@",str);
}
-(id)initWithPath:(NSString *)path_v{
if(shared) return shared;
self = [super init];
if(self){
self.path = [path_v stringByExpandingTildeInPath];
NSLog(@"full path is %@",path);
NSFileManager *fm = [NSFileManager defaultManager];
files = [NSMutableArray array];
NSDirectoryEnumerator *enum_dir = [fm enumeratorAtPath:path];
NSString *file;
BOOL flag = false;
while(file = [enum_dir nextObject]){
//NSLog(@"file is %@",file);
[fm fileExistsAtPath:[path stringByAppendingPathComponent:file] isDirectory:&flag];
if(flag)
[enum_dir skipDescendents];
else
[files addObject:[path stringByAppendingPathComponent:file]];
}
NSLog(@"files is : %@",files);
queue = [[NSOperationQueue alloc] init];
shared = self;
}
return self;
}
-(id)init{
return [self initWithPath:@"."];
}
@end
int main(void){
@autoreleasepool{
NSProcessInfo *pi = [NSProcessInfo processInfo];
NSArray *args = [pi arguments];
NSLog(@"args : %@",args);
//NSString *path = @".";
Main *main = [[Main alloc] init];
//NSLog(@"%@",[@"~/src" stringByAppendingPathComponent:@"asm_src"]);
//Main *main = [[Main alloc]initWithPath:@"~/src/asm_src/nasm_src/linux"];
[main start];
//NSString *content = [[NSString alloc] initWithContentsOfFile:@"./9.m"
//encoding:NSUTF8StringEncoding error:NULL];
//NSLog(@"%@",[NSString stringWithContentsOfFile:@"./9.m"
//encoding:NSASCIIStringEncoding error:NULL]);
//NSLog(@"%@",content);
NSRunLoop *loop = [NSRunLoop currentRunLoop];
[loop run];
}
return 0;
}
objective-c中线程编程一例的更多相关文章
- muduo网络库源码学习————线程本地单例类封装
muduo库中线程本地单例类封装代码是ThreadLocalSingleton.h 如下所示: //线程本地单例类封装 // Use of this source code is governed b ...
- 【并发编程】线程池是否需要手动关闭吗?以Hutool中的线程池为例
Hutool工具包中使用线程池的API是: ThreadUtil.execute() /** * 直接在公共线程池中执行线程 * * @param runnable 可运行对象 */ public s ...
- Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞
Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...
- Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别
Task C# 多线程和异步模型 TPL模型 Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- Java中线程的yield(),sleep()以及wait()的区别
从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列).并且在某一时刻cpu只为ready queue中位于队列头部的线程服务. 但是当前正在被服务的线程可能觉得cpu的服务质量不 ...
- JavaSE中线程与并行API框架学习笔记1——线程是什么?
前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位 ...
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
- java双重检测或枚举类实现线程安全单例(懒汉模式)
双重检测实现 /** * 懒汉模式->双重同步锁单例模式 */ public class SingletonExample5 { private SingletonExample5() { } ...
随机推荐
- 18 UI美化之level(等级显示显示)
根据level显示哪张图片 在工程文件的res/drawable/新建level-list 如下 <?xml version="1.0" encoding="utf ...
- 与markdown的第一次接触
什么是markdown markdown是一种比html轻量级的标记语言. markdown的介绍与学习请参考:markdown认识与入门 CSDN Markdown博客视频教程 知乎: 怎样引导新手 ...
- qsort函数应用大全
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , c ...
- Android简易实战教程--第十八话《ListView显示,简单的适配器SimpleAdapter》
本篇介绍Listview的显示,对于listview有许多的适配器,如ArrayAdapter,BaseAdapter,SimpleAdapter等等.本篇先热身一下,介绍最简单的SimpleAdap ...
- 1090. Highest Price in Supply Chain (25) -计层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39933993 shiro官网:http://shiro.apache.org/ shi ...
- 使用LRU算法缓存图片,android 3.0
在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下 (例如使用 ListView, GridView 或者 ViewPager控件), 显示在屏幕上的图片以及即 ...
- mysqldump的几个主要选项探究
0.前言 本文主要探讨 mysqldump 的几种主要工作方式,并且比较一下和 mk-parralel-dump的一些差异,为备份方式的选择提供更多的帮助. 1.mysqldump 首先来看下 mys ...
- SQL性能优化应该考虑哪些?
1.调整数据结构的设计.这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等. 2.调整应用程序结构设计.这一部分也是在开 ...
- iOS中 Animation 动画大全 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! iOS开发者交流QQ群: 446310206 1.iOS中我们能看到的控件都是UIView的子类,比如UIButt ...