source: tests/exceptions/pingpong_nonlocal.cfa @ 64e3ac7

Last change on this file since 64e3ac7 was 64e3ac7, checked in by Peter A. Buhr <pabuhr@…>, 11 months ago

harmonize name for fibonacci_nonlocal and pingpong_nonlocal

  • Property mode set to 100644
File size: 1.5 KB
Line 
1#include <fstream.hfa>
2#include <thread.hfa>
3#include <coroutine.hfa>
4#include <stdlib.hfa>
5#include <fstream.hfa>
6
7exception num_pings { int num; };
8vtable(num_pings) num_pings_vt;
9
10exception num_pongs { int num; };
11vtable(num_pongs) num_pongs_vt;
12
13thread Ping;
14thread Pong { Ping & p; int cnt; };
15thread Ping { Pong & p; int cnt; };
16
17int numtimes = 100000;
18
19void main( Pong & this ) with(this) {
20    try {
21        for ( ;; ) {
22            while( !poll( this ) ) {}
23            num_pongs except{ &num_pongs_vt, cnt + 1 };
24            resumeAt( p, except );
25        }
26    } catchResume ( num_pings * e; e->num < numtimes ) {
27        cnt = e->num;
28    } catch( num_pings * e ) {
29        if ( e->num == numtimes ){
30            num_pongs except{ &num_pongs_vt, e->num + 1 };
31            resumeAt( p, except );
32        }
33    }
34}
35
36void main( Ping & this ) with(this) {
37    try {
38        for ( ;; ) {
39            while( !poll( this ) ) {}
40            num_pings except{ &num_pings_vt, cnt + 1 };
41            resumeAt( p, except );
42        }
43    } catchResume ( num_pongs * e; e->num < numtimes ) {
44        cnt = e->num;
45    } catch( num_pongs * e ) {
46        if ( e->num == numtimes ){
47            num_pings except{ &num_pings_vt, e->num + 1 };
48            resumeAt( p, except );
49        }
50    }
51}
52
53int main() {
54    processor p;
55    sout | "start";
56    {
57        Ping ping;
58        Pong pong;
59        &ping.p = &pong;
60        &pong.p = &ping;
61        num_pings except{ &num_pings_vt, 0 };
62        resumeAt( pong, except );
63    }
64    sout | "done";
65}
66
Note: See TracBrowser for help on using the repository browser.