Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İlke SDK'sı bir gözlemci sınıfı içerir. Gözlemci üyeleri sanaldır ve eşzamansız işlemlere yönelik geri çağrıları işlemek için geçersiz kılınmalıdır.
Zaman uyumsuz bir işlem tamamlandığında, OnXxx() sonuca karşılık gelen üye işlevi çağrılır.
mip::Profile::Observer için örnekler OnLoadSuccess(), OnLoadFailure() ve OnAddEngineSuccess()'dir.
Aşağıdaki örneklerde, SDK örnekleri tarafından da kullanılan ve istenen geri çağırma davranışını uygulamak için genişletilebilen promise/future deseni gösterilmektedir.
Profil Gözlemcisi Uygulaması
Aşağıdaki örnekte, mip::Profile::Observer sınıfından türetilen ProfileObserver adlı bir sınıf oluşturduk. Örneklerde kullanılan future/promise desenini kullanmak için üye işlevleri geçersiz kılındı.
Not: Aşağıdaki örnekler yalnızca kısmen uygulanır ve ilgili gözlemciler için mip::ProfileEngine geçersiz kılmalar içermez.
profile_observer.h
Başlık dosyasında, mip::Profile::Observer öğesinden türeyen ProfileObserver öğesini tanımlar, ardından üye işlevlerinin her birini geçersiz kılarız.
class ProfileObserver final : public mip::Profile::Observer {
public:
ProfileObserver() { }
void OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) override;
void OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
//TODO: Implement remaining members
};
profile_observer.cpp
Uygulamanın kendisinde, her gözlemci üye işlevi için gerçekleştirecek bir eylem tanımlarız.
Her üye iki parametre kabul eder. Birincisi, işlevin işlediği sınıfı gösteren paylaşılan işaretçidir.
ProfileObserver::OnLoadSuccess, bir mip::Profile almayı bekler.
ProfileObserver::OnAddEngineSuccess beklerdi mip::ProfileEngine.
İkincisi, bağlama ilişkin paylaşılan bir işaretçidir. Uygulamamızda bağlam, shared_ptr<void> olarak iletilen bir std::promise öğesine referanstır. Fonksiyonun ilk satırı this'i std::promise türüne dönüştürür, ardından bunu promise adlı bir nesnede depolar.
Son olarak, promise->set_value() ayarlanıp mip::Profile nesnesi geçirilerek future hazır duruma getirilir.
#include "profile_observer.h"
#include <future>
//Called when Profile is successfully loaded
void ProfileObserver::OnLoadSuccess(const std::shared_ptr<mip::Profile>& profile, const std::shared_ptr<void>& context) {
//cast context to promise
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(context);
//set promise value to profile
promise->set_value(profile);
}
//Called when Profile fails to load
void ProfileObserver::OnLoadFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) {
auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::Profile>>>(context);
promise->set_exception(error);
}
//TODO: Implement remaining observer members
Herhangi bir eşzamansız işlem gerçekleştirilirken gözlemci gerçekleştirim(i), ayar oluşturucusuna veya eşzamansız işlevin kendisine aktarılır.