- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrency/actors/dynamic.cfa
r77fd9fe2 r7edf912 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 ((message &) this){ Delete };17 16 set_allocation( 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 i( argv[1] );39 if ( Times < 1 ) goto Usage;38 Times = ato( argv[1] ); 39 if ( Times < 1 ) fallthru default; 40 40 } // if 41 41 case 1: // use defaults 42 42 break; 43 43 default: 44 Usage: 45 sout | "Usage: " | argv[0] | " [ times (> 0) ]"; 46 exit( EXIT_FAILURE ); 44 exit | "Usage: " | argv[0] | " [ times (> 0) ]"; 47 45 } // switch 48 46 49 printf("starting\n");47 sout | "starting"; 50 48 51 52 49 executor e{ 0, 1, 1, false }; 50 start_actor_system( e ); 53 51 54 printf("started\n");52 sout | "started"; 55 53 56 57 58 59 60 54 derived_msg * d_msg = alloc(); 55 (*d_msg){}; 56 derived_actor * d_actor = alloc(); 57 (*d_actor){}; 58 *d_actor | *d_msg; 61 59 62 printf("stopping\n");60 sout | "stopping"; 63 61 64 62 stop_actor_system(); 65 63 66 printf("stopped\n"); 67 68 return 0; 64 sout | "stopped"; 69 65 }
Note: See TracChangeset
for help on using the changeset viewer.