假設我有以下代碼:提升線程和try_join_for給出不同的輸出每次
#include <boost/chrono.hpp>
#include <boost/thread.hpp>
#include <iostream>
int main()
{
boost::thread thd([]{ std::cout << "str \n"; });
boost::this_thread::sleep_for(boost::chrono::seconds(3));
if (thd.try_join_for(boost::chrono::nanoseconds(1)))
{
std::cout << "Finished \n";
}
else
{
std::cout << "Running \n";
}
}
MSVC 12.0和提升1.55每次都帶給我不同的輸出,當我啓動該程序。例如,
str
Finished
str
Finished
str
Running
當我將boost :: chrono :: nanoseconds更改爲boost :: chrono :: microseconds時,輸出看起來和預期的一樣。
爲什麼?我究竟做錯了什麼?它是一個提升庫中的錯誤嗎?是否有一張關於提升錯誤跟蹤器的機票?
在此先感謝。
不錯的答案:我想知道'比賽',因爲在加入嘗試之前有三秒的延遲。但是這個種族不在另一個線程中,而是在'try_join_until()'中的計時器。 –