2016-09-29 80 views
-1

好的,所以我強烈地感覺到這很容易完成,事實上這樣的事情在其他語言中很容易實現。只有我的C++不是我最強大的語言,所以我不能完全理解這應該如何完成。將一段異步代碼插入到C++函數中

我有一個函數可以完成一些啓動的事情,然後通過它來完成一些I/O操作並從另一個進程獲取數據。當然,我可以用回調做到這一點,但我想避免這樣做:

startupPt1() { 
/* stuff */ 
ioCall(startupPt2()); 
} 

startupPt2() { 
/* rest of stuff */ 
} 

我真的想避免這種情況,因爲沒有在這裏發生在部分1和2的動作之間的邏輯分離,只我們希望在它們之間異步發生一些I/O。

我現在有我會使用上面的回調,但除此之外,我不知道我該怎麼做。

+0

你有沒有嘗試過任何東西?要求_「任何想法?」_聽起來太寬泛,不能在這裏問。這可能會變成無休止的討論,這是我們不想在這裏。該網站相當簡潔的常見問題,如問題和答案對。你也可能想閱讀[here](http://stackoverflow.com/help/asking)。 –

+1

[std :: async](http://en.cppreference.com/w/cpp/thread/async)如何? – Gasper

+0

*「當然,我可以用回調來做到這一點」*您可以在C++中使用回調。看看'std :: function' –

回答

2

OK,只是對我的意見詳細說明,你可能會想是這樣的:

#include<future> 

//... 

void startup() { 
    // part 1 
    auto result = std::async([](){ 
     // IO part 
    }); 
    // part 2 not relying on the result of IO 
    // part 2 that uses IO result as result.get() 
} 

這將使OS安排您的IO爲你工作。您唯一能夠保證完成的時間是在您撥打results.get()之後。

+0

這正是我想要的。我不明白你在做什麼,但代碼片段說得很清楚。謝謝! – Bronze