The BOINC core/application interface, version 4.0 | ![]() |
The dynamic part must support several functions:
This interface has several shortcomings:
Version 4 uses the following message channels:
process_control_req (core->app) | <suspend/>, <resume/>, <quit/> |
process_control_reply (app->core) | same as above |
graphics_req (core->app) | <window/>, <fullscreen/>, <none/> |
graphics_reply (app->core) | same as above |
heartbeat (core->app) | <heartbeat/>, <ignore_heartbeat/> |
status (app->core) | <fraction_done>, etc. |
trickle_up (app->core) | <have_new_trickle_up/> |
trickle_down (core->app) | <have_new_trickle_down/> |
boinc_init(int flags)This creates a 'manager thread'; the calling thread is the 'worker thread'. The 'flags' argument specifies which message streams will be handled by the manager thread. By default, it handles the following message streams:
process_control_req | The manager thread suspends and resumes the worker thread. It uses a semaphore to avoid suspending or aborting the worker thread while it's checkpointing. |
heartbeat | It does exit(ERR_NO_HEARTBEAT) if heartbeat is lost |
status | It measures and reports worker thread CPU time |
trickle_up | |
trickle_down |
boinc_init_graphics()is unchanged; it creates a 'graphics thread' that calls application-supplied functions to render graphics and handle input.
boinc_finish()is unchanged: it creates a 'finish file' and exits.
Version 4.0 leaves it up to the developer to decide which message channels are handled by which program. For example, suspend/resume messages might be handled by either the controller or the worker.
The following lower-level API functions are provided:
boinc_parse_app_init_data() boinc_attach_shmem() boinc_get_messageHere's an example in which the controller program handles graphics messages, and the work programs handle suspend/resume:
Controller program: boinc_parse_app_init_data() boinc_attach_shmem() while (1) boinc_write_app_init_data() spawn next worker program while (1) if worker has finished if successful break else exit if have graphics message start or kill graphics program boinc_parse_app_init_data() boinc_finish() Worker program: boinc_init() ... write 'phase done' file exit(0) // don't call boinc_finish()
Last modified 1:02 AM UTC, March 03 2019.
Copyright © 2025 University of California.
Permission is granted to copy, distribute and/or modify this document
under the terms of the
GNU Free Documentation License,
Version 1.2 or any later version published by the Free Software Foundation.