Здравствуйте, Qbit86, Вы писали:
S>>а) Может нажать "Отмена". Приложение все еще выполняется, но задачу уже можно прекращать. S>>б) Может вообще закрыть приложение. Работу приложения нужно завершить.
S>>То есть выполнение всей задачи нужно уметь прерывать. S>>Предполагается, что у всех "долгих" функций есть еще и асинхронный интерфейс, который может уведомлять когда работа функции завершена, и также есть возможность послать асинхронно выполняющейся функции сигнал "прекратить работу".
Q>Для этого используется механизм кооперативной отмены. То есть работа прерывается не в одностороннем порядке вызывающей стороной; вызываемая сторона должна «согласиться» прерваться. Посмотри в MSDN реализацию и примеры использования .NET-классов CancellationToken и CancellationTokenSource, и сделай по аналогии в C++. Но для этого асинхронный API должен поддерживать вызовы с передачей токена отмены, и его опрос.
все можно сделать проще,
работа уходит чего-то ждать, и если она была отменена — ей бросается исключение.
собственно работы с таймаутом делаются так же.
вместо исключения может быть код ошибки, но это так надежно, т.к. ее можно проигнорировать.