2010-07-07 46 views
1

我需要我所有的線程定期檢查它們是否仍在運行,以便程序結束時它們可以自行終止。除了其中之一以外,這只是一個檢查狀態變量的問題,但最後一個是用戶交互線程,其循環將無限期地等待用戶輸入,僅在用戶輸入指令時檢查狀態變量。在這一點上,程序無論如何都會失敗,因爲課程在不運行時無法正常運行。不過,理想情況下,我不想談及這一點。getline上的C++超時

我在想最好的解決方案,如果可能的話,是getline的超時,但是如果這是不可能的或一個好的選擇,我打開任何選項,這將允許線程終止整齊。

順便說一句,我看到很多關於std :: getline的提及。無論我是否使用命名空間,getline似乎都可以工作。一個是另一個的別名,哪個是正確的?

+0

你正在使用什麼線程庫? – 2010-07-08 00:16:42

+0

關於你的附加問題:閱讀依賴於參數的查找。 – sbi 2010-07-08 09:12:55

回答

1

沒有(標準)方式設置std::getline的超時時間。特別是,C++標準庫不知道線程的存在

要回答第二個問題,標準兼容版本std::getline是命名空間中的一個。

+0

你沒有回答第二個問題。 ADL通常不需要名稱空間限定,但是在任何我聽說過的現代實現中,您只會使用'std :: getline'。 – 2011-12-08 10:22:17

0

也許最簡單的方法來做到這一點將分拆另一個線程,唯一的目的是執行getline()

google返回this result,它給出了一個例子,雖然它嚴重依賴於Win32。但是,您應該能夠將其移植到您正在使用的任何線程庫。

0

如果你的線程沒有任何清理,他們需要做的,另一種解決方案將是當你想結束你的過程時調用exitexit將終止所有線程並結束進程。

0

您需要另一個線程來發信號通知用戶線程。
你如何做到這一點將取決於你正在使用的線程庫。