ActorKit.framework/fr: Difference between revisions

From iPhone Development Wiki
(adding language option)
(removing box so that it doesn't show up in the wrong place)
 
(One intermediate revision by the same user not shown)
Line 77: 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