std::stop_callback<Callback>:: ~stop_callback
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
stop_callback::~stop_callback
|
||||
| Deduction guides |
|
~stop_callback
(
)
;
|
(начиная с C++20) | |
Уничтожает объект
stop_callback
.
Если
*
this
имеет
stop_token
с ассоциированным состоянием остановки, отменяет регистрацию колбэка из него.
Если функция обратного вызова выполняется параллельно в другом потоке, деструктор не завершается до тех пор, пока не завершится выполнение функции обратного вызова. Если функция обратного вызова выполняется в том же потоке, в котором вызывается деструктор, то деструктор возвращает управление без ожидания завершения выполнения функции обратного вызова (см. Примечания).
Примечания
Деструктор
stop_callback
разработан для предотвращения состояний гонки и взаимных блокировок. Если другой поток в данный момент вызывает обратный вызов, то деструктор не может завершиться до окончания этого вызова, иначе объект функции может быть уничтожен во время его выполнения. Функция обратного вызова не обязана быть ни копируемой, ни перемещаемой - она существует в самом объекте
stop_callback
даже после регистрации.
С другой стороны, если текущий поток, вызывающий деструктор, является тем же потоком, который вызывает callback, то деструктор не может ожидать, иначе произойдет взаимоблокировка. Допустимо и корректно, когда тот же поток уничтожает
stop_callback
во время вызова его callback-функции, поскольку сама callback-функция может напрямую или косвенно уничтожить
stop_callback
.