Я пытаюсь запустить функцию асинхронно, но она запускается синхронно.
#include <thread>
#include <future>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
std::future<int> setPromise()
{
auto promise = std::make_shared<std::promise<int>>();
auto future = promise->get_future();
auto asyncFn = [&]() {
cout << "Async started ...\n";
for(int i=0; i<100000; i++)
for(int j=0; j<10000; j++) {}
promise->set_value(400);
fprintf(stderr, "Async ended ...\n");
};
std::async(std::launch::async, asyncFn);
return future;
}
int main()
{
std::future<int> result = setPromise();
cout << "Asynchronously launched \n";
int ret = result.get();
cout << ret << endl;
return 0;
}
Скомпилировал его с помощью следующей команды
g++ -std=c++11 -pthread promise.cpp -o promise
Я ожидаю, что лямбда-функция будет вызываться асинхронно, и пока цикл работает в асинхронном потоке, я ожидаю журналы из главной.Но я вижу, что функция никогда не запускается асинхронно и всегда лямбда завершается, и только тогда мы получаем следующие операторы в main для выполнения
Что я ожидаю
Async started ...
Asynchronously launched
Async ended ...
Что я получаю, так это
Async started ...
Async ended ...
Asynchronously launched