- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrency/actors/dynamic.cfa
r7edf912 r77fd9fe2 9 9 struct derived_actor { inline actor; }; 10 10 struct derived_msg { 11 12 11 inline message; 12 int cnt; 13 13 }; 14 14 15 15 void ?{}( derived_msg & this, int cnt ) { 16 set_allocation( this, Delete );17 16 ((message &) this){ Delete }; 17 this.cnt = cnt; 18 18 } 19 19 void ?{}( derived_msg & this ) { ((derived_msg &)this){ 0 }; } 20 20 21 21 allocation receive( derived_actor & receiver, derived_msg & msg ) { 22 23 24 25 26 27 28 29 30 31 22 if ( msg.cnt >= Times ) { 23 sout | "Done"; 24 return Delete; 25 } 26 derived_msg * d_msg = alloc(); 27 (*d_msg){ msg.cnt + 1 }; 28 derived_actor * d_actor = alloc(); 29 (*d_actor){}; 30 *d_actor | *d_msg; 31 return Delete; 32 32 } 33 33 34 34 int main( int argc, char * argv[] ) { 35 35 switch ( argc ) { 36 36 case 2: 37 37 if ( strcmp( argv[1], "d" ) != 0 ) { // default ? 38 Times = ato ( argv[1] );39 if ( Times < 1 ) fallthru default;38 Times = atoi( argv[1] ); 39 if ( Times < 1 ) goto Usage; 40 40 } // if 41 41 case 1: // use defaults 42 42 break; 43 43 default: 44 exit | "Usage: " | argv[0] | " [ times (> 0) ]"; 44 Usage: 45 sout | "Usage: " | argv[0] | " [ times (> 0) ]"; 46 exit( EXIT_FAILURE ); 45 47 } // switch 46 48 47 sout | "starting";49 printf("starting\n"); 48 50 49 50 51 executor e{ 0, 1, 1, false }; 52 start_actor_system( e ); 51 53 52 sout | "started";54 printf("started\n"); 53 55 54 55 56 57 58 56 derived_msg * d_msg = alloc(); 57 (*d_msg){}; 58 derived_actor * d_actor = alloc(); 59 (*d_actor){}; 60 *d_actor | *d_msg; 59 61 60 sout | "stopping";62 printf("stopping\n"); 61 63 62 64 stop_actor_system(); 63 65 64 sout | "stopped"; 66 printf("stopped\n"); 67 68 return 0; 65 69 }
Note: See TracChangeset
for help on using the changeset viewer.