دعم مكتبة القابلة للمقاطعة

مكتبة القابلة للمقاطعة

في Aspose.Slides 18.4، قدمنا الفئات InterruptionToken وInterruptionTokenSource. تسمح لك بمقاطعة المهام الطويلة مثل فك التسلسل، التسلسل، والعرض.

المقتطف البرمجي التالي يوضح مقاطعة مهمة قيد التنفيذ:

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()); // تشغيل الإجراء في خيط منفصل
    Threading::Thread::Sleep(10000);       // مهلة
    tokenSource->Interrupt();              // إيقاف التحويل
}

الأسئلة المتداولة

ما هو هدف مكتبة المقاطعة في Aspose.Slides؟

توفر آلية لمقاطعة العمليات الطويلة — مثل تحميل العروض، حفظها، أو عرضها — قبل إكمالها. هذا مفيد عندما يجب حصر زمن المعالجة أو عندما لم تعد المهمة ضرورية.

ما الفرق بين InterruptionToken وInterruptionTokenSource?

  • InterruptionToken يُمرّر إلى واجهة برمجة تطبيقات Aspose.Slides ويتم فحصه أثناء العمليات الطويلة.
  • InterruptionTokenSource يُستخدم في الكود الخاص بك لإنشاء رموز وإحداث مقاطعات عن طريق استدعاء Interrupt().

ما هي المهام التي يمكن مقاطعتها؟

أي مهمة في Aspose.Slides تقبل InterruptionToken — مثل تحميل عرض باستخدام Presentation(path, loadOptions) أو حفظه عبر Presentation::Save(...) — يمكن مقاطعتها.

هل تحدث المقاطعة فورًا؟

لا. المقاطعة تعاونية: العملية تتحقق دوريًا من الرمز وتتوقف بمجرد اكتشاف أنها تم استدعاء Interrupt().

ماذا يحدث إذا ناديت Interrupt() بعد اكتمال المهمة بالفعل؟

لا شيء — الاستدعاء لا يؤثر إذا كانت المهمة المقابلة قد اكتملت بالفعل.

هل يمكنني إعادة استخدام نفس InterruptionTokenSource لمهام متعددة؟

نعم — لكن بعد استدعاء Interrupt() على ذلك المصدر، ستتم مقاطعة جميع المهام التي تستخدم رموزه. استخدم مصادر رموز منفصلة لإدارة المهام بشكل مستقل.