on my opinion, you usually use callback - when you do not know when the function will finishes its work, in order this callback could signal you about the finish of e.g. long-playing action (e,g, asynchronous url-load) - in order not to freeze the application while waiting...
in other cases (not long-living & NOT from another thread) everything can be done with simple functions... and any bool flag being checked ...
only being executed in a separate thread the function needs somehow (e.g. with functor passed into it) to signal about the finish (callback is of urgent importance)... imho
main Events already exist
Please enable the necessary setting in your browser, otherwise you will not be able to log in.