यह जब तक आप std::async
फोन एक std::future
future_status::deferred
से किसी भी अन्य राज्य के लिए सेट कभी नहीं की जाएगी कि जब तक आप भविष्य पर get
या wait
फोन लगता है। wait_for
& wait_until
ब्लॉक को जारी नहीं रखेगा और future_status::deferred
वापस लौटाएगा भले ही कार्य पहले ही चल रहा है और परिणाम संग्रहीत कर चुका है।std :: भविष्य अभी भी टाल जब std :: packaged_task (VS11) का उपयोग कर
यहाँ एक उदाहरण है:
#include <future>
void main()
{
auto func = []() { return 5; };
auto asyncFuture = std::async(std::launch::async, func);
auto status = asyncFuture.wait_for(std::chrono::seconds(0)); // timeout (1)
auto deferredFuture = std::async(std::launch::deferred, func);
status = deferredFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
std::packaged_task<int()> task(func);
auto packagedTaskFuture = task.get_future();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
task();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // deferred (2)
packagedTaskFuture.wait();
status = packagedTaskFuture.wait_for(std::chrono::seconds(0)); // ready (0)
}
मैं वर्तमान सी ++ 11 मानक की जरूरत नहीं है, लेकिन 30.6.9 में मसौदा मानक का कहना है कि उस में परिणाम संग्रहीत करना चाहिए जब एक packaged_task
चलाया जाता है भविष्य का साझा राज्य। यह बहुत स्पष्ट नहीं है कि इसमें अपेक्षित wait_until
/wait_for
व्यवहार स्थापित करना शामिल है या नहीं।
वहाँ पहले से async
कॉल के संबंध में इस क्षेत्र में VS11 व्यवहार के साथ मुद्दे थे: http://social.msdn.microsoft.com/Forums/hu/parallelcppnative/thread/4394f2c1-0404-40df-869b-f4fc36fc035c
साथ ही ऐसा लगता है अन्य compilers की तरह इस क्षेत्र में समस्याएं हैं: C++ 11 future_status::deferred not working
किसी को भी है कि मानक बेहतर जानते हो सकता है: क्या यह अपेक्षित व्यवहार है या वीएस 11 में लागू होने के साथ कोई समस्या है?
वही स्थगित स्थिति दुर्भाग्यवश वीएस 11 - अपडेट 1 का उपयोग करके प्राप्त की जाती है, जब भविष्य वादे से प्राप्त होता है (यह async के साथ काम करता है)। कुछ समय पहले उन्हें यह मुद्दा बताया गया था लेकिन अभी भी काम नहीं कर रहा है। यह कई मामलों में std :: भविष्य का उपयोग करने के उद्देश्य को व्यावहारिक रूप से हरा देता है। कम से कम 1.51 बूस्ट के साथ काम करता है। – Ghita