2015-09-08 30 views
-1

是否可以在C++程序中啓動異步線程?如何在C++ 11的Mac上創建異步::線程?

std::async(function); 

在Mac上它不適合我,主PROGRAMM工作等待回報。

我想從我的程序開始我的異步線程,並停止它關閉......沒有任何同步或類似的東西。

我正在使用C++ 11與XCode。 將是偉大的,如果你有我的解決方案。

非常感謝

+1

也許你想要使用一個常規['std :: thread'](http://en.cppreference.com/w/cpp/thread/thread)? –

+0

不,我需要一個異步線程,我不能同步線程,這是爲什麼: 在我的線程是一個URL的請求循環,以獲得一個JSON, 如果我同步此線程,我的程序滯後一點位。 – TheRealLife

+1

但是,如果你創建一個線程它*是*「異步」,它將獨立於你的主線程運行。然而,在我看來,你想要使用['std :: async'](http://en.cppreference.com/w/cpp/thread/async)和[*'async'啓動策略*]( http://en.cppreference.com/w/cpp/thread/launch),然後它會在後臺運行,您可以隨時獲得結果。 –

回答

3

您應指定您希望線程通過傳遞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 
} 

這應該工作。

+0

爲什麼不'auto fut = ...'? – NathanOliver

+0

@NathanOliver在這種情況下可能是爲了清晰起見。 –

+0

@NathanOliver我會使用'auto',但在這個例子中,會掩蓋OP的* type *。所以最好把它明確。 – Galik