Támogatás a megszakítható könyvtárhoz

Áttekintés

Aspose.Slides egy megszakítható feldolgozási mechanizmust biztosít hosszú ideig futó prezentációs feladatokhoz, például deszerializáláshoz, szerializáláshoz és rendereléshez. Ez a mechanizmus az InterruptionToken és InterruptionTokenSource osztályokon alapul.

Egy InterruptionToken hozzárendelhető a LoadOptions-hoz, és átadható a Presentation konstruktorának. Amikor a InterruptionTokenSource::Interrupt() hívódik, a kapcsolódó hosszú ideig futó feladat megszakad.

Megszakítható könyvtár

Az Aspose.Slides 18.4 bevezetésével megjelentek az InterruptionToken és InterruptionTokenSource osztályok. Ezek lehetővé teszik a hosszú ideig futó feladatok, például a deszerializálás, szerializálás és renderelés megszakítását.

A következő kódrészlet bemutatja egy futó feladat megszakítását:

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

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

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

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

        auto presentation = System::MakeObject<Presentation>(dataDir + u"sample.pptx", options);
        presentation->Save(dataDir + u"sample.ppt", Export::SaveFormat::Ppt);
    });

    auto action = System::Action<SharedPtr<IInterruptionToken>>(function);
    auto tokenSource = System::MakeObject<InterruptionTokenSource>();
    
    Run(action, tokenSource->get_Token()); // a művelet futtatása külön szálban
    Threading::Thread::Sleep(10000);       // időtúllépés
    tokenSource->Interrupt();              // a konverzió leállítása
}

GYIK

Mi a célja az Aspose.Slides megszakító könyvtárának?

Egy mechanizmust biztosít a hosszú ideig futó műveletek—például a prezentációk betöltése, mentése vagy renderelése—megszakítására, még mielőtt befejeződnének. Ez akkor hasznos, ha a feldolgozási időt korlátozni kell, vagy a feladat már nem szükséges.

Mi a különbség a InterruptionToken és a InterruptionTokenSource között?

  • InterruptionToken átadásra kerül az Aspose.Slides API-nak, és a hosszú ideig futó műveletek során ellenőrzésre kerül.
  • InterruptionTokenSource a kódban használható tokenek létrehozására és a megszakítások előidézésére a Interrupt() hívásával.

Milyen feladatok szakíthatók meg?

Bármely Aspose.Slides feladat, amely elfogad egy InterruptionToken—például egy prezentáció betöltése a Presentation(path, loadOptions) vagy mentése a Presentation::Save(...)—megszakítható.

A megszakítás azonnal megtörténik?

Nem. A megszakítás együttműködő: a művelet időközönként ellenőrzi a tokent, és leáll, amint észleli, hogy a Interrupt() meghívásra került.

Mi történik, ha a Interrupt() hívást egy már befejezett feladat után hívom meg?

Semmi — a hívásnak nincs hatása, ha a megfelelő feladat már befejeződött.

Újra felhasználhatom ugyanazt a InterruptionTokenSource több feladathoz?

Igen — de miután meghívja a Interrupt() ezen a forráson, az összes tokenjét használó feladat megszakad. Használjon külön tokenforrásokat a feladatok független kezeléséhez.