Ссылка, которую вы опубликовали, дает мне мало информации о том, как этот класс будет использоваться (возможно, Microsoft сэкономит байты на образце кода для оплаты золотого парашюта Баллмера в следующем году?), Поэтому простите меня за полное игнорирование этого.
Что-то вроде этого:
auto result = async(launch::async, my_sync_func_that_i_want_to_test);
future_status status = result.wait_for(chrono::milliseconds(100));
if (status == future_status::timeout)
cout << "Timed out" << endl;
if (status == future_status::ready)
cout << "Finished on time" << endl;
Необходимость включения заголовков <future>
и <chrono>
.
Если my_sync_func_that_i_want_to_test()
никогда не заканчивается, у вас возникнет другая проблема. Объект future
(result
) будет блокироваться до тех пор, пока нить, начатая async()
, не завершится. Нет никакого переносимого способа восстановления из «убитых/отмененных/прерванных» потоков, поэтому для этого, вероятно, потребуется какой-то определенный для платформы код, даже если вы развернете свой собственный async_that_detaches_the_thread()
(который нетрудно найти, here's one example).