/* * Copyright (C) 2018 Vito Caputo - * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3 as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include THUNK_DEFINE(bye, pulp_t *, p) { /* note this is just to illustrate (and test) forced exit from a fiber, * it's unnecessary if all fibers return, which has the same result. */ puts("bye!"); pulp_exit(p); return 0; } THUNK_DEFINE(bar, int, id) { printf("%i ", id); return 0; } THUNK_DEFINE(foo, pulp_t *, p, int, w, int, h) { for (int y = 0; y < h; y++) { printf("\nw=%i h=%i\n", w, h); for (int x = 0; x < w; x++) (void) pulp_fiber_new(p, (w - x), THUNK(bar(x))); pulp_msleep(p, w + 1, NULL); } (void) pulp_fiber_new(p, 0, THUNK(bye(p))); pulp_msleep(p, 9999, NULL); return 0; } int main(int argc, char *argv[]) { pulp_t *p; pulp_init(); p = pulp_new(); (void) pulp_fiber_new(p, 0, THUNK(foo(p, 40, 100))); pulp_run(p); pulp_free(p); return 0; }