|
|
@@ -11,6 +11,7 @@ struct counter {
|
|
|
};
|
|
|
|
|
|
void *counter_future(void *env, void *data);
|
|
|
+struct future counter_then(void *env, void *result);
|
|
|
|
|
|
int
|
|
|
main(int argc, char *argv[])
|
|
|
@@ -22,14 +23,15 @@ main(int argc, char *argv[])
|
|
|
|
|
|
counter_f1.f = &counter_future;
|
|
|
counter_f1.env = &c1;
|
|
|
+ counter_f1.then = counter_then;
|
|
|
counter_f2.f = &counter_future;
|
|
|
counter_f2.env = &c2;
|
|
|
|
|
|
while ( true ) {
|
|
|
void *r1 = NULL;
|
|
|
void *r2 = NULL;
|
|
|
- r1 = future_poll(counter_f1, NULL);
|
|
|
- r2 = future_poll(counter_f2, NULL);
|
|
|
+ r1 = future_poll(&counter_f1, NULL);
|
|
|
+ r2 = future_poll(&counter_f2, NULL);
|
|
|
if ( r1 != NULL && r2 != NULL ) {
|
|
|
break;
|
|
|
}
|
|
|
@@ -53,3 +55,22 @@ counter_future(void *env, void *data)
|
|
|
(void) data;
|
|
|
return NULL;
|
|
|
}
|
|
|
+
|
|
|
+struct future
|
|
|
+counter_then(void *env, void *result)
|
|
|
+{
|
|
|
+ struct future ftr = {0};
|
|
|
+ struct counter *c = (struct counter *)env;
|
|
|
+ uint32_t res = *(uint32_t *) result;
|
|
|
+
|
|
|
+ printf("\t\tResult: %d\n", res);
|
|
|
+
|
|
|
+ c->count += 5;
|
|
|
+ c->end += 10;
|
|
|
+ ftr.f = counter_future;
|
|
|
+ ftr.env = c;
|
|
|
+ if ( res < 35 ) {
|
|
|
+ ftr.then = counter_then;
|
|
|
+ }
|
|
|
+ return ftr;
|
|
|
+}
|