Поддержка прерываемой библиотеки
Contents
[
Hide
]
Прерываемая библиотека
Класс InterruptionToken и класс InterruptionTokenSource были добавлены в Aspose.Slides для C++. Эти типы поддерживают прерывание долго выполняющихся задач, таких как десериализация, сериализация или рендеринг. InterruptionTokenSource представляет источник токена или нескольких токенов, передаваемых в метод LoadOptions.set_InterruptionToken(). Когда токен прерывания установлен, а экземпляр LoadOptions передан в конструктор Presentation, любая долго выполняющаяся задача, связанная с этой презентацией, будет прервана, когда будет вызван метод InterruptionTokenSource.Interrupt().
Ниже приведен фрагмент кода, демонстрирующий прерывание выполняющейся задачи.
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>();
// выполнить действие в отдельном потоке
Run(action, tokenSource->get_Token());
// тайм-аут
Threading::Thread::Sleep(5000);
// остановить конвертацию
tokenSource->Interrupt();
}