C++ कार्य अनुसूचक: अवलोकन और उपयोग के उदाहरण
C++ में आधुनिक विकास में अक्सर निर्धारित समय पर, विलंब के साथ या समय-समय पर कुछ क्रियाएँ करने की आवश्यकता होती है। इसके लिए कार्य अनुसूचक (task schedulers) का उपयोग किया जाता है। इस लेख में हम C++ में कार्य अनुसूचक को लागू करने के लिए तीन लोकप्रिय दृष्टिकोणों और लाइब्रेरीज़ पर विचार करेंगे: TaskFlow, CronCpp और Boost.Asio। आप सीखेंगे कि अपने प्रोजेक्ट के लिए उपयुक्त उपकरण कैसे चुनें, और कोड उदाहरण देखेंगे।
कार्य अनुसूचक की आवश्यकता क्यों है?
कार्य अनुसूचक आपको अनुमति देता है:
- निर्धारित समय पर पृष्ठभूमि संचालन करना (जैसे, 3:00 बजे कैश साफ़ करना)।
- निर्धारित अंतराल पर आवधिक कार्य चलाना (जैसे, हर 5 सेकंड में सेंसर से पूछताछ करना)।
- किसी कार्य के निष्पादन को एक निश्चित समय के लिए स्थगित करना।
- निर्भरताओं को ध्यान में रखते हुए कार्यों के समानांतर निष्पादन का प्रबंधन करना।
1. TaskFlow — कार्य ग्राफ के साथ आधुनिक अनुसूचक
TaskFlow कार्यों के ग्राफ बनाने के लिए एक लाइब्रेरी है जिसमें शेड्यूलिंग और समानांतर निष्पादन का समर्थन है। यह विशेष रूप से तब उपयोगी होता है जब कार्य एक-दूसरे पर निर्भर होते हैं और उन्हें एक विशिष्ट क्रम में निष्पादित करने की आवश्यकता होती है।
TaskFlow की मुख्य विशेषताएँ:
- कार्यों के निर्देशित अचक्रीय ग्राफ (DAG) का निर्माण।
- सशर्त और चक्रीय निर्भरताओं का समर्थन।
- थ्रेड्स में कार्यों का स्वचालित वितरण।
- टाइमर और विलंब के लिए अंतर्निहित समर्थन।
उदाहरण: विलंब के साथ एक सरल कार्य
#include <taskflow/taskflow.hpp>#include <iostream>#include <chrono>
int main() { tf::Executor executor; tf::Taskflow taskflow;
// 2 सेकंड के विलंब के साथ एक कार्य बनाएँ auto [A, timer] = taskflow.emplace([](){ std::cout << "कार्य A 2 सेकंड के बाद निष्पादित हुआ" << std::endl; });
// टाइमर कॉन्फ़िगर करें timer.name("timer"); timer.silent_delay(std::chrono::seconds(2));
// अनुसूचक चलाएँ executor.run(taskflow).wait(); return 0;}यह कोड एक कार्य बनाता है जो अनुसूचक शुरू होने के 2 सेकंड बाद निष्पादित होगा। TaskFlow स्वचालित रूप से थ्रेड्स और समय का प्रबंधन करता है।
2. CronCpp — cron-सिंटैक्स के साथ हल्का अनुसूचक
CronCpp cron-शेड्यूल के अनुसार कार्यों को शेड्यूल करने के लिए एक न्यूनतम लाइब्रेरी है। यह तब आदर्श है जब आपको परिचित प्रारूप (जैसे Linux cron) में निष्पादन समय निर्दिष्ट करने की आवश्यकता होती है।
CronCpp की मुख्य विशेषताएँ:
- मानक cron-सिंटैक्स का समर्थन (मिनट, घंटे, दिन, महीने, सप्ताह के दिन)।
- हल्का वजन — Boost या अन्य भारी निर्भरताओं की आवश्यकता नहीं है।
- कार्यों को जोड़ने और हटाने के लिए सरल API।
उदाहरण: हर मिनट कार्य
#include <croncpp/croncpp.h>#include <iostream>#include <thread>#include <chrono>
int main() { cron::Cron cron; // एक कार्य जोड़ें जो हर मिनट निष्पादित होता है cron.schedule("* * * * *", [](){ std::cout << "कार्य हर मिनट निष्पादित हो रहा है!" << std::endl; });
// पृष्ठभूमि थ्रेड में अनुसूचक चलाएँ std::thread cron_thread([&cron](){ cron.start(); });
// इसे 5 मिनट तक चलने दें std::this_thread::sleep_for(std::chrono::minutes(5)); cron.stop(); cron_thread.join(); return 0;}इस उदाहरण में, कार्य हर मिनट निष्पादित होगा। CronCpp स्वचालित रूप से अगले लॉन्च के समय की गणना करता है और फ़ंक्शन को कॉल करता है।
3. Boost.Asio — एसिंक्रोनस कार्यों के लिए शक्तिशाली अनुसूचक
Boost.Asio केवल एक अनुसूचक नहीं है, बल्कि एसिंक्रोनस प्रोग्रामिंग के लिए एक पूर्ण लाइब्रेरी है। इसके टाइमर और कार्य अनुसूचक व्यापक रूप से उपयोग किए जाते हैं।