क्या यह के लिए के लिए mutable
बनाने के लिए सुरक्षित है, या यह T
पर निर्भर करता है? में के रूप में:std :: वादा <T> धागा-सुरक्षित है?
using Data = std::tuple<bool, int, int>;
struct X {
std::future<Data> prepare() const {
return m_promise.get_future();
}
void asyncHandler(int a, int b) const {
m_promise.set_value({true, a, b});
}
void cancel() const {
m_promise.set_value({false, 0, 0});
}
mutable std::promise<Data> m_promise; // Is this safe?
};
void performAsyncOp(const X& x) {
std::future<Data> fut = x.prepare();
dispatch(x);
std::future_status result = fut.wait_for(std::chrono::milliseconds(150));
if (result == std::future_status::timeout) {
x.cancel();
}
handleResult(fut.get());
}
यह पता चला है कि वायदा रीसेट करने योग्य नहीं होने के कारण भी यह पैटर्न टूट गया है। मैंने सोचा होगा कि future.get() इसे रीसेट कर देगा लेकिन यह नहीं करता है। मैं वास्तव में इस वादे/भावी सामान के बिंदु को देखने के लिए संघर्ष कर रहा हूं। – James