2013-10-08 1 views
0

У меня есть функция синхронизации, которую я хочу проверить, если она закончится. Я хочу, чтобы иметь возможность запускать код для X-времени, и если время заканчивается для продолжения. здесь то, что я хочу:Как проверить функцию синхронизации в C++

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); 

есть простой способ сделать это?

SynchronizationContext

спасибо.

ответ

0

Ссылка, которую вы опубликовали, дает мне мало информации о том, как этот класс будет использоваться (возможно, 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).

Смежные вопросы