У меня есть функция синхронизации, которую я хочу проверить, если она закончится. я хочу иметь возможность запускать код для X-времени, и если время заканчивается, чтобы продолжить. вот что я хочу:
bool flag = false;
some_function_that_run_the_next_block_for_x_sec()
{
my_sync_func_that_i_want_to_test();
flag = true;
}
Assert::IsTrue(flag);
есть ли простой способ сделать это?
Благодарю.
Ссылка, которую вы опубликовали, дает мне небольшое представление о том, как этот класс будет использоваться (возможно, 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()
никогда не закончится, у вас my_sync_func_that_i_want_to_test()
другая проблема. future
объект (result
) будет блокироваться до тех пор, пока поток, запущенный async()
завершится. Нет никакого переносимого способа восстановления из "убитых/отмененных/прерванных" потоков, поэтому для этого, вероятно, потребуется некоторый код для конкретной платформы, даже если вы async_that_detaches_the_thread()
свой собственный async_that_detaches_the_thread()
(который нетрудно найти здесь, например, один пример).