Вызов Destroy() из Final_suspend() приводит к сбою.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Вызов Destroy() из Final_suspend() приводит к сбою.

Сообщение Anonymous »

Я вызываю h.destroy() в Final_suspend, чтобы автоматически уничтожить сопрограмму, когда она завершает выполнение, а затем возобновляю ожидание сопрограммы (которая ожидает завершения задачи). Я нашел вопрос об этом методе и ответ, объясняющий, почему он должен работать.
Насколько я вижу, этот метод действительно работает, но не с MSVC 2022, который дважды вызывает деструктор задачи, см. код ниже:

Код: Выделить всё

#include 
#include 

#include 
#include 

#include 
#include 
#include 

// simple timers

// stored timer tasks
struct timer_task
{
std::chrono::steady_clock::time_point target_time;
std::coroutine_handle handle;
};

// comparator
struct timer_task_before_cmp
{
bool operator()(const timer_task& left, const timer_task& right) const
{
return left.target_time > right.target_time;
}
};

std::priority_queue timers;

inline void submit_timer_task(std::coroutine_handle handle, std::chrono::nanoseconds timeout)
{
timers.push(timer_task{ std::chrono::steady_clock::now() + timeout, handle });
}

//template 
struct UpdatePromise;

//template 
struct UpdateTask
{
// declare promise type
using promise_type = UpdatePromise;

UpdateTask(std::coroutine_handle
 handle) :
handle(handle)
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/71106923/calling-destroy-from-final-suspend-results-in-a-crash[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»