ActorKit.framework/fr: Difference between revisions

From iPhone Development Wiki
m (Britta moved page ActorKit.framework(French) to ActorKit.framework/fr without leaving a redirect)
(removing box so that it doesn't show up in the wrong place)
 
(2 intermediate revisions by the same user not shown)
Line 4: Line 4:
| classID = AK
| classID = AK
}}
}}
<small>'''Languages: [[ActorKit.framework|English]] &bull; français'''</small>


'''ActorKit''' est une implémentation Apple basée sur l'Objective-C pour [http://en.wikipedia.org/wiki/Actor_model la programmation orientée objet].
'''ActorKit''' est une implémentation Apple basée sur l'Objective-C pour [http://en.wikipedia.org/wiki/Actor_model la programmation orientée objet].
Line 76: Line 77:
== Référence ==
== Référence ==
* http://github.com/kennytm/iphone-private-frameworks/tree/master/ActorKit/
* http://github.com/kennytm/iphone-private-frameworks/tree/master/ActorKit/
{{Navbox Frameworks}}
[[Category:Frameworks/Private]]

Latest revision as of 19:52, 3 March 2014

ActorKit.framework/fr
Private Framework
Availabile 3.0 – present
Class Prefix AK
Headers [headers.cynder.me]

Languages: English • français

ActorKit est une implémentation Apple basée sur l'Objective-C pour la programmation orientée objet.

Cela est utilisé dans DataAccess.framework, Message.framework et searchd.

Exemple d'usage

#import <ActorKit/ActorKit.h>

// You must provide a protocol on the messages that the actor can receive.
@protocol SlowActor
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock;  // oneway is important here. Without it, calls will be synchronous.
@end


@interface SlowActor : AKActor<SlowActor> {
  int actor_id;
}
-(id)initWithID:(int)_id;
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock;
@end


@implementation SlowActor
-(id)initWithID:(int)_id {
  if ((self = [super init]))
    actor_id = _id;
  return self;
}
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock; {
  printf("Worker %d is doing work...\n", actor_id);
  usleep(actor_id*actor_id*100000);
  [lock lock];
  [lock unlockWithCondition:[lock condition]+1];
  printf("Worker %d has done.\n", actor_id);
}
@end



int main () {
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  
  SlowActor* actors[10];
  for (unsigned i = 0; i < 10; ++ i)  {
    actors[i] = [[[SlowActor alloc] initWithID:i] autorelease];
    // You must call -startThreadDispatchQueue before sending any works to the actors.
    [actors[i] startThreadDispatchQueue];
  }
    
  NSConditionLock* lock = [[NSConditionLock alloc] initWithCondition:0];
  
  for (unsigned i = 0; i < 10; ++ i)
    // Use -send to obtain the actor's mailbox. Send messages to their mailboxes to allow asynchronous messages.
    [[actors[i] send] doWorkWithConditionLock:lock];
  
  printf("Waiting for all workers...\n");
  
  [lock lockWhenCondition:10];
  [lock unlock];
  
  printf("All workers done...\n");

  [pool drain];
  
  return 0;
}

Référence