Re[2]: Кооперативная отмена
От: Abyx Россия  
Дата: 18.06.14 12:37
Оценка:
Здравствуйте, Qbit86, Вы писали:

S>>а) Может нажать "Отмена". Приложение все еще выполняется, но задачу уже можно прекращать.

S>>б) Может вообще закрыть приложение. Работу приложения нужно завершить.

S>>То есть выполнение всей задачи нужно уметь прерывать.

S>>Предполагается, что у всех "долгих" функций есть еще и асинхронный интерфейс, который может уведомлять когда работа функции завершена, и также есть возможность послать асинхронно выполняющейся функции сигнал "прекратить работу".

Q>Для этого используется механизм кооперативной отмены. То есть работа прерывается не в одностороннем порядке вызывающей стороной; вызываемая сторона должна «согласиться» прерваться. Посмотри в MSDN реализацию и примеры использования .NET-классов CancellationToken и CancellationTokenSource, и сделай по аналогии в C++. Но для этого асинхронный API должен поддерживать вызовы с передачей токена отмены, и его опрос.


все можно сделать проще,
работа уходит чего-то ждать, и если она была отменена — ей бросается исключение.

собственно работы с таймаутом делаются так же.

вместо исключения может быть код ошибки, но это так надежно, т.к. ее можно проигнорировать.
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.