2012-10-16 12 views
6

Widziałem odniesienia do" strefy "w MsgPack C headers, ale nie można znaleźć żadnej dokumentacji na temat tego, co to jest ani do czego służy. Co to jest? Ponadto, gdzie jest dokumentacja funkcji dla API C?Co to jest strefa MsgPack "

+0

Proponuję czytać swoją własną dokumentację [] (https://github.com/msgpack/msgpack/blob/master/README.md) w pierwszej kolejności ... –

+0

Czy chcesz skierować mnie na msgpack.org? Jeśli tak, to nie znalazłem tam żadnego przydatnego opisu stref. Google znajduje kilka odniesień, ale nic nie jest bardzo pomocne: https://www.google.com/search?q=zone+site%3Amsgpack.org&aq=f&sugexp=chrome,mod=10&sourceid=chrome&ie=UTF-8 – brooks94

+0

nope. Odwiedź link, który jest fragmentem projektu GitHub. –

Odpowiedz

3

msgpack_zone to wewnętrzna struktura używana do zarządzania pamięcią & Cykl życia w czasie rozpakowywania. Powiedziałbym, że nigdy nie będziesz musiał wchodzić z nim w interakcję, jeśli używasz standardowego interfejsu wysokiego poziomu dla wersji unpacking lub wersji alternatywnej streaming.

Zgodnie z moją wiedzą, nie ma szczegółowej dokumentacji: zamiast tego powinieneś zapoznać się z zestawem testów, który zapewnia wygodne próbki kodu do wykonywania typowych zadań, np. patrz pack_unpack_c.cc i streaming_c.cc.

0

Z tego, co mogłem zebrać, jest to typ "tylko ruch", który przechowuje rzeczywiste dane z msgpack::object. Może to być szczegół implementacji, ale czasami przecieka w kod użytkownika. Na przykład za każdym razem, gdy chcesz uchwycić msgpack::object w lambda, musisz także uchwycić obiekt msgpack::zone. Czasami nie można używać przechwytywania ruchu (np. Programy do obsługi asio w niektórych przypadkach zajmują tylko kopie proceduralne lub kompilator nie obsługuje tej funkcji). Aby obejść ten problem, można:

msgpack::unpacked r; 
while (pac_.next(&r)) { 
    auto msg = result.get(); 
    io_->post([this, msg, z = std::shared_ptr<msgpack::zone>(r.zone().release())]() { 
       // msg is valid here    
      })); 
}