Каковы некоторые способы выполнения функции асинхронно, но для гарантии того, что она будет выполнена после возврата из текущей функции?std :: async гарантировать выполнение после оператора возврата
Пример:
std::future<void> future;
int do_smth(std::function<void()> callback)
{
int id = 0;
auto cb = [=](){ callback(id);};
future = std::async(std::launch::async, cb);
return id;
}
std::async
вызова должен выполнить после возвращения было закончено. ASFAIK, что это не гарантировано, выполнение может все еще произойти до возвращения функции.
[Edit] Я хочу, чтобы это так я могу реализовать шаблон наблюдателя, например:
class A
{
public:
void send_request()
{
m_id = do_smth(std::bind(&A::on_result,this,_1);
}
void on_result(RequestId id)
{
if (id == m_id) {
// my request finished!
}
}
private:
RequestId m_id;
};
Я знаю, что могу использовать нить, с очередью, и после событий, но думал, что может что-то проще , если бы я мог использовать std::async
.
Очевидным способом является создание потока в приостановленном состоянии и возобновление его после возврата функции. В настоящее время нет способа сделать это со стандартным C++, поэтому вам нужно будет сделать это в другой библиотеке потоков. – nwp
Зачем вам это поведение? – GManNickG
У меня возникло какое-то странное чувство, что вы пытаетесь реализовать асинхронный/ожидающий вид? Вещь –