4. Uruchom piaskownicę

W poprzednich sekcjach przygotowaliśmy środowisko, zasadę, wykonawcę i środowisko piaskownicy w trybie piaskownicy. Następnym krokiem jest utworzenie i uruchomienie obiektu Sandbox2.

Uruchamiaj synchronicznie

Piaskownica może działać synchronicznie, co blokuje odtwarzanie, dopóki nie uzyskasz wyniku. Fragment kodu poniżej przedstawia utworzenie instancji obiektu Sandbox2 i jego synchroniczne wykonanie. Bardziej szczegółowy przykład znajdziesz tutaj: static.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run();  // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();

Uruchamianie asynchroniczne

Możesz też uruchamiać piaskownicę asynchronicznie, dzięki czemu nie będzie ona blokowana do czasu uzyskania wyniku. Jest to przydatne na przykład podczas komunikacji z użytkownikiem piaskownicy. Fragment kodu poniżej przedstawia ten przypadek użycia. Bardziej szczegółowe przykłady znajdziesz w językach crc4 i w sekcji tool.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
  // Communicate with sandboxee, use s2.Kill() to kill it if needed
  // ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();