Unterstützung für störbare Bibliothek

Störbare Bibliothek

Die InterruptionToken und InterruptionTokenSource Klassen wurden zu Aspose.Slides für C++ hinzugefügt. Diese Typen unterstützen die Unterbrechung von langlaufenden Aufgaben, wie Deserialisierung, Serialisierung oder Rendering. Die InterruptionTokenSource repräsentiert die Quelle des Tokens oder mehrere Tokens, die an die LoadOptions.set_InterruptionToken() Methode übergeben werden. Wenn das Unterbrechungs-Token gesetzt ist und die LoadOptions Instanz an den Presentation Konstruktor übergeben wird, wird jede langlaufende Aufgabe, die mit dieser Präsentation verbunden ist, unterbrochen, wenn die Methode InterruptionTokenSource.Interrupt() aufgerufen wird.

Der folgende Code-Ausschnitt zeigt, wie eine laufende Aufgabe unterbrochen wird.

void Run(Action<SharedPtr<IInterruptionToken>> action, SharedPtr<IInterruptionToken> token)
{
    auto thread_function = std::function<void()>([&action, &token]() -> void
    {
        action(token);
    });

    auto thread = System::MakeObject<Threading::Thread>(thread_function);
    thread->Start();
}

void Run()
{
    String dataDir = GetDataPath();

    auto function = std::function<void(SharedPtr<IInterruptionToken> token)> ([&dataDir](SharedPtr<IInterruptionToken> token) -> void
    {
        SharedPtr<LoadOptions> options = System::MakeObject<LoadOptions>();
        options->set_InterruptionToken(token);

        SharedPtr<Presentation> presentation = System::MakeObject<Presentation>(dataDir + u"pres.pptx", options);
        presentation->Save(dataDir + u"pres.ppt", Export::SaveFormat::Ppt);
    });
    auto action = System::Action<SharedPtr<IInterruptionToken>>(function);

    auto tokenSource = System::MakeObject<InterruptionTokenSource>();
    // Aktion in einem separaten Thread ausführen
    Run(action, tokenSource->get_Token());
    // Timeout
    Threading::Thread::Sleep(5000);
    // Konvertierung stoppen
    tokenSource->Interrupt();
}