Soporte para Biblioteca Interrumpible

Biblioteca Interrumpible

Las clases InterruptionToken y InterruptionTokenSource han sido añadidas a Aspose.Slides para C++. Estos tipos soportan la interrupción de tareas de larga duración, como deserialización, serialización o renderizado. El InterruptionTokenSource representa la fuente del token o múltiples tokens pasados al método LoadOptions.set_InterruptionToken(). Cuando se establece el token de interrupción y la instancia de LoadOptions se pasa al constructor de Presentation, cualquier tarea de larga duración relacionada con esta presentación será interrumpida cuando se invoque el método InterruptionTokenSource.Interrupt().

El siguiente fragmento de código demuestra cómo interrumpir una tarea en ejecución.

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>();
    // ejecutar acción en un hilo separado
    Run(action, tokenSource->get_Token());
    // tiempo de espera
    Threading::Thread::Sleep(5000);
    // detener conversión
    tokenSource->Interrupt();
}