是否可以在C++程序中啓動異步線程?如何在C++ 11的Mac上創建異步::線程?
像
std::async(function);
在Mac上它不適合我,主PROGRAMM工作等待回報。
我想從我的程序開始我的異步線程,並停止它關閉......沒有任何同步或類似的東西。
我正在使用C++ 11與XCode。 將是偉大的,如果你有我的解決方案。
非常感謝
是否可以在C++程序中啓動異步線程?如何在C++ 11的Mac上創建異步::線程?
像
std::async(function);
在Mac上它不適合我,主PROGRAMM工作等待回報。
我想從我的程序開始我的異步線程,並停止它關閉......沒有任何同步或類似的東西。
我正在使用C++ 11與XCode。 將是偉大的,如果你有我的解決方案。
非常感謝
您應指定您希望線程通過傳遞std::launch::async作爲第一個參數異步運行。否則,運行時系統可以選擇延遲推出:
#include <future>
void function()
{
// do asynchronous stuff.
}
int main()
{
std::future<void> fut = std::async(std::launch::async, function);
// do other stuff
fut.get(); // synchronize threads
}
這應該工作。
爲什麼不'auto fut = ...'? – NathanOliver
@NathanOliver在這種情況下可能是爲了清晰起見。 –
@NathanOliver我會使用'auto',但在這個例子中,會掩蓋OP的* type *。所以最好把它明確。 – Galik
也許你想要使用一個常規['std :: thread'](http://en.cppreference.com/w/cpp/thread/thread)? –
不,我需要一個異步線程,我不能同步線程,這是爲什麼: 在我的線程是一個URL的請求循環,以獲得一個JSON, 如果我同步此線程,我的程序滯後一點位。 – TheRealLife
但是,如果你創建一個線程它*是*「異步」,它將獨立於你的主線程運行。然而,在我看來,你想要使用['std :: async'](http://en.cppreference.com/w/cpp/thread/async)和[*'async'啓動策略*]( http://en.cppreference.com/w/cpp/thread/launch),然後它會在後臺運行,您可以隨時獲得結果。 –