پشتیبانی از کتابخانه قابل قطع

مروری

Aspose.Slides یک مکانیسم پردازش قابل قطع برای وظایف طولانی‌مدت ارائه، مانند غیرسریال‌سازی، سریال‌سازی و رندرینگ فراهم می‌کند. این مکانیزم بر پایه کلاس‌های InterruptionToken و InterruptionTokenSource است.

یک InterruptionToken می‌تواند به LoadOptions اختصاص داده شود و به سازندهٔ Presentation منتقل شود. وقتی InterruptionTokenSource::Interrupt() فراخوانی می‌شود، کار طولانی‌مدت مرتبط قطع می‌گردد.

کتابخانه قابل قطع

در 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 به API Aspose.Slides پاس داده می‌شود و در طول عملیات طولانی‌مدت بررسی می‌شود.
  • InterruptionTokenSource در کد شما برای ایجاد توکن‌ها و ایجاد قطع با فراخوانی Interrupt() استفاده می‌شود.

کدام وظایف می‌توانند قطع شوند؟

هر وظیفه‌ای از Aspose.Slides که یک InterruptionToken می‌پذیرد—مانند بارگذاری یک ارائه با Presentation(path, loadOptions) یا ذخیره با Presentation::Save(...)—قابل قطع است.

آیا قطع به‌صورت فوری رخ می‌دهد؟

خیر. قطع به صورت تعاملی است: عملیات به‌طور دوره‌ای توکن را بررسی می‌کند و به محض اینکه متوجه فراخوانی Interrupt() شود، متوقف می‌شود.

اگر پس از اتمام یک کار، Interrupt() را فراخوانی کنم، چه می‌شود؟

هیچ چیزی—اگر کار مربوطه قبلاً تکمیل شده باشد، فراخوانی هیچ تاثیری ندارد.

آیا می‌توانم از همان InterruptionTokenSource برای چندین کار استفاده کنم؟

بله—اما پس از اینکه Interrupt() را روی آن منبع فراخوانی کردید، تمام کارهایی که از توکن‌های آن استفاده می‌کنند قطع می‌شوند. برای مدیریت مستقل کارها از منابع توکن جداگانه استفاده کنید.