2014-04-27 99 views
2

我有一個線程調用函數MyFunc,參數爲params。基本上它在流中輸出點,而MyFunc正在運行,超時500毫秒。我需要等待1分鐘的線程,然後我需要輸出「MyFunc成功完成」,如果該功能在1分鐘內完成其工作或「超時」,如果1分鐘後它仍在運行。我怎樣才能做到這一點 ?等待線程加入時間限制

std::future<void> f = std::async(std::launch::async, MyFunc, params); 

std::chrono::milliseconds span(500); 
while (f.wait_for(span) == std::future_status::timeout) 
    std::cout << '.'; 

回答

3

您可以使用wait_for(),沒有問題。

std::future<void> f = std::async(std::launch::async, MyFunc, params); 


auto because = std::async(std::launch::async,[&]() 
     { 
      // for your use, you may want to change it from 0 seconds to something 
      // like 1 second, or 500 ms 
      while(f.wait_for(std::chrono::seconds(0)) != std::future_status::ready) 
       std::cout << "."; 
     }).wait_for(std::chrono::seconds(60)); 

if(because == std::future_status::ready) 
    std::cout << "Successfully Completed\n"; 
else 
    std::cout << "Timeout"; 
+0

聖潔少女,你16嗎?當我16歲時我做了什麼。我吃了污垢 –

+0

是的,謝謝:) – Alejandro

0

請記住,當你開始等待,或計算你等待的次數。然後在每次迭代中檢查這些值,並確定是否已經超過1分鐘。在這種情況下,你退出循環。