std::promise<T>
için std::mutex
örneğinde olduğu gibi mutable
yapılıyor mu, yoksa T
mu? olduğu gibi: yöntemlerdenStd :: Promise <T> iş parçacığı güvenli midir?
// retrieving the result
future<R> get_future();
// setting the result
void set_value(see below);
void set_exception(exception_ptr p);
// setting the result with deferred notification
void set_value_at_thread_exit(see below);
void set_exception_at_thread_exit(exception_ptr p);
Yok const
işaretli olduğu için biz sadece bundan constness hakkında herhangi bir bilgiye tahmin edemediği:
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());
}
Bu model, gelecekteki sıfırlanamayan nedenlerden dolayı bozuk çıkıyor. Future.get() 'un bunu sıfırlayacağını düşünürdüm ama değil. Tüm bu vaat/geleceğin konularını gerçekten görmeye çalışıyorum. – James