… | |
… | |
406 | static struct CoroAPI *GCoroAPI; |
406 | static struct CoroAPI *GCoroAPI; |
407 | |
407 | |
408 | static int nready () { return CORO_NREADY; } |
408 | static int nready () { return CORO_NREADY; } |
409 | static int cede () { return CORO_CEDE ; } |
409 | static int cede () { return CORO_CEDE ; } |
410 | |
410 | |
|
|
411 | static double (*time)(); |
|
|
412 | static double next_cede; |
411 | static int cede_counter; |
413 | static int cede_counter; |
412 | |
414 | |
|
|
415 | static void do_cede_every (); |
|
|
416 | static void do_cede_to_tick (); |
|
|
417 | static void do_cede_to_tick_every (); |
|
|
418 | |
413 | static void cede_every (int count) |
419 | static void cede_every (int count) |
414 | { |
420 | { |
415 | if (++cede_counter >= count) |
421 | if (++cede_counter >= count) |
416 | { |
422 | do_cede_every (); |
417 | cede_counter = 0; |
423 | } |
418 | |
424 | |
419 | if (coroapi::nready ()) |
425 | static void cede_to_tick () |
420 | coroapi::cede (); |
426 | { |
421 | } |
427 | if (time () >= next_cede) |
|
|
428 | do_cede_to_tick (); |
|
|
429 | } |
|
|
430 | |
|
|
431 | static void cede_to_tick_every (int count) |
|
|
432 | { |
|
|
433 | if (++cede_counter >= count) |
|
|
434 | cede_to_tick (); |
422 | } |
435 | } |
423 | |
436 | |
424 | static void wait_for_tick (); |
437 | static void wait_for_tick (); |
425 | static void wait_for_tick_begin (); |
438 | static void wait_for_tick_begin (); |
426 | }; |
439 | }; |