2013-10-08 21 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

您發佈的鏈接讓我對如何使用該類有點洞察力(也許微軟在示例代碼上節省了字節,以支付明年的鮑爾默黃金降落傘?),所以請原諒我完全忽略它。

事情是這樣的:

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),這可能也需要一些平臺特定的代碼。