对于SuspendThread函数的没有真正理解清楚.直到最近使用多线程执行任务的时候,发现有时候使用它比额外使用内核对象来更加方便.
DWORD WINAPI ThreadProc( PVOID pvParament ) { int iCnt = 0; while ( 1 ) { cout<<iCnt<<endl; if ( iCnt > 10000 ) { break; } ++iCnt; } return 0; } void main() { bool bExit = FALSE; HANDLE hThread = CreateThread( NULL,0,ThreadProc,NULL,0,NULL ); Sleep( 2000 ); SuspendThread( hThread ); Sleep( 2000 ); ResumeThread( hThread ); WaitForSingleObject( hThread,INFINITE ); CloseHandle( hThread ); }
这里简单使用这两个函数来完成线程的运行-中断-继续的状态切换.
核心编程中关于如何完全终止线程问题做出了一些引导:让我们尽量实现线程自己退出,而不是使用Windows那些逼不得已的函数.
代码大概的意思是:
DWORD WINAPI ThreadProc( PVOID pvParament ) { while( WaitForSingleObject( hEvent,INFINITE ) == WAIT_OBJECT_0 ) { //循环做一些操作.循环里面保存当前状态. } return 0; }
这样我们可以使用hEvent来控制线程的暂停,继续,和退出.这样总体来讲
这种写法主要的问题有:
1. 整个线程执行体都在while里面,但初始化代码不能放在while,现在的可能把初始化代码加到while的前面,这样唯一的问题在于无法掌控初始化代码的状态.
2. 线程在控制的时候并不能达到”暂停”的目地,因为需要我们去手动保存当前的状态,等到hEvent变成可触发状态时,再继续(整个过程完全由我们自己来控制),实际上我们可以使用SuspendThread.
在使用Objective-C语言进行了一段时间的iOS开发之后,发现自己的语言基础相对薄弱,于是开始弥补自己的短处。我发现在用过一种语言之后,再回过头来看它的很多原理会发现有更加深刻的理解。下面就对一直困惑我的属性和成员变量的用法和关系问题进行浅析,由于水平有限可能会有错误,请看过文章的人多多指正。
1、属性
关于属性的用法在苹果的官方文档《The Objective-C Programming Language》中有详细的说明,在这里就不再赘述,链接如下:
《The Objective-c Programming Language》
如果你的英文不好,没关系,已经有人把这个文档全部翻译完了,链接如下:
Objective-C编程语言官方文档翻译
2、关于@synthesize object = _object 的解释
我们在很多代码中会见到这样的写法:
@interface MyClass:NSObject{ MyObjecct *_object; } @property(nonamtic, retain) MyObjecct *object; @end @implementatin MyClass @synthesize object=_object;我在网上查阅了一些资料和其他人写的博文,总结了这样写的几条原因如下:
(1)32位系统和64位系统的差异
在32位系统中,如果类的@interface部分没有进行ivar(instance variable)声明,但有@property声明,在类的@implementation部分有响应的@synthesize,则会得到类似下面的编译错误:
Synthesize property ‘xX’ must either be named the same as a compatible ivar or must explicitly name an ivar
在64位系统中,运行时系统会自动给类添加ivar,添加的ivar以一个下划线“_”做前缀。
(2)避免莫名其妙的Bug
在这里简单说一下_object和object的区别。_object是MyClass类的成员变量,object是属性。property和synthesize定义了一对getter和setter方法,在这里的getter方法是object,setter方法是setObject,事实上getter和setter方法操作的是变量_object。
如果写synthesize objec = _object 时getter方法为:
-(MyObject *)object { return _object; }如果写synthesize object 时getter方法为:
-(MyObject *)object { return object; }当函数名和属性名重名的时候会出现意想不到的错误,为了避免这种Bug,Apple给的Demo Code里面多数也采用这种方式。
(3)属性和变量的用法
属性是用self.object,通过getter方法来调用的,可以在类外使用。而变量是通过_object来调用,只能在该类对应的implementation中使用,在类外不能使用。
下面看一下两种赋值操作:
self.object = [[MyObject alloc] init]; _object = [[MyObject alloc] init];第一种的方式和@property(nonamtic,retain)有关,实际上是通过调用setter方法setObject来实现赋值的。第二种方式是简单的指针赋值,没有调用setter方法。
下面是retainCount的变化:
MyObject *tmp = [[MyObject alloc] init]; self.object = tmp; //retainCount = 2 [tmp release]; //retainCount = 1 _object = [[MyObject alloc] init]; //retainCount = 1
作为标志性的个人计算机革命的卓越领导者,史蒂夫?乔布斯在最近的三十年当中,可以当之无愧的称为硅谷王者。从Macintosh、iPod、到iTunes和iPhone、iPad,他发出独特的“非同凡想”口号已经获得了世人的认可。
出生即被未婚父母送样,付不出高昂的学费而辍学,被自己创立的公司开除,被诊断出绝症。一连串的人生低潮对他而言却是美好的体验。
去年10月5日,乔布斯于美国加州逝世,享年56岁。苹果公司董事会在声明中说道:“乔布斯的聪明和热情,是无数发明以改善我们生活的源泉。因为乔布斯,世界变得无限美好。”
乔布斯1955年2月24日出生于旧金山。出生后不久就被Paul和Clara Jobs领养。他的亲生父母,Joanne Simpson和Abdulfattah Jandali,在乔布斯出生时还只是一对未婚的研究生情侣。在抛弃乔布斯之后不久他们结了婚,并育有一个女儿,也就是乔布斯的亲生妹妹,美国知名小说家 Mona Simpson。
1976年,乔布斯与童年好友沃兹尼亚克共同创办苹果电脑公司,销售被认为全世界第一台的个人电脑——Apple II。外界称其为创新者,改变电脑的世界,与爱迪生齐名。
乔布斯、考克利及好友沃兹尼亚克推出了Apple II
1984年,担任苹果电脑董事局的乔布斯向股东们介绍名为“Macintosh”的个人电脑。第二年,他便被逐出公司,十多年间,被科技界视为昨日黄花。
被解雇几年后,苹果开始走下坡路,逐渐滑向电脑行业的边缘地带。直到1997年乔布斯回归苹果,局势才得以扭转。
乔布斯回归苹果之前两年,苹果共亏损近20亿美元,股价跌至历史最低水平。乔布斯执掌大权后,十多年间,苹果市值至今已逾3500亿美元。
1999年3月,苹果推出OS X Server。OS X系统成为Mac电脑的软件支柱。
2001年,苹果推出钛金属外壳的Mac个人电脑。不断推陈出新是乔布斯追求技术创新的证明。
2005年,苹果推出iPod shuffle,改写了电子音乐的潮流。
2010年1月27日,乔布斯出席苹果发布会,发布了iPad。
2010年6月7日,时任苹果行政总裁的乔布斯发布了iPhone 4.这也是他最后一次现身亲自介绍iPhone产品。他独特的演说技巧为人所津津乐道。
2011年3月2日,苹果推出iPad 2平板电脑。iPod、iPad和iPhone等一系列创新产品彻底改变了个人电脑和数字媒体行业。
如其亲生父母一样,乔布斯也有过未婚生子的经历。1978年,乔布斯的女朋友,画家Chrisann Brennan为他生下了一个女儿。然而当时的乔布斯却拒绝承认此事,声称自己“不孕不育”,不可能有自己的孩子。所以Brennan只能无奈的独自抚养 这个女儿,情况艰难的她甚至还需要依靠当地的福利制度才能度日。不过最终乔布斯还是承认了这个图片上名为Lisa Brennan-Jobs的女儿。Lisa在2000年从哈佛大学毕业之后成为了一名作家。
在一部非官方的乔布斯传记《The Second Coming of Steve Jobs》当中,作者Alan Deutschman曝出了乔布斯曾和一位出生于1941年,被誉为“民谣女皇”的乡村女歌手约会。不过乔布斯从未承认他与Baez的关系。在另一部非官 方的传记《iCon:Steve Jobs》当中,作者也曝出了乔布斯有可能已与这名歌星结婚的内幕。不过文中谈到“考虑到她的年纪,他们似乎不太可能育有孩子”。
1991年3月18日,乔布斯与劳伦 鲍威尔(Laurene Powell)在美国国家公园的Ahwahnee酒店举行了婚礼。有意思是的,这场婚礼的主持并非任何一名有名气有身份的大人物,而是一个普通的禅宗和 尚。他们在婚后育有三个孩子,Reed Paul,Erin Sienna和Eve。
乔布斯的传奇之处在于他改善了世界上很多人的生活质量,这不仅是因为他提出的物质创新。例如iPod或Mac电脑,也不仅因为他提出的服务创 新,例如iT unes和App应用,而是因为他代表一个开放理念模式,这个模式是之前无人敢梦想的。对乔布斯来说,未发现的新理念是无穷无尽的,人们需要做的是尽量扩 展自己的想象力,而后和其他人一起合作,把这些理念变成事实。
如果找不到最完美、最好的东西,他宁可一无所有。这种偏执在苹果的产品设计中随处可见。完美主义在企业文化中并不是被鼓励的品质,因为它往往是 执行力的天敌。为了“可以再完善一点”而反复延宕,最终可能导致灾难性后果。苹果和乔布斯调和完美主义的方法是“从最少开始”;如果不能把这件新产品的十 个功能都做到完美,我们就砍掉五个,哪怕其中包括在传统智慧看来不可缺少的功能。
2004年,乔布斯被诊断出患上了一种罕见的胰腺癌。那一年,他请了病假,之后在2009年上半年又再次病假,并在同年的9月底回到公司。这一年,他接受了肝脏移植手术。
苹果创立者史蒂夫 乔布斯留下的是一个联合创新的模式。这个模式并非不可复制或超越,其他人也能跟随这个模式,创造全新的产品和服务,推进经济发展、改变人们的生活。这或许就是纪念乔布斯,一个伟大企业家、创新者和远见家最好的方式。