Aufgabenplaner in C++: TaskFlow, CronCpp, Boost.Asio

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Aufgabenplaner in C++: Überblick und Anwendungsbeispiele



In der modernen C++-Entwicklung besteht häufig die Notwendigkeit, bestimmte Aktionen zeitgesteuert, verzögert oder periodisch auszuführen. Dazu werden Aufgabenplaner (Task Scheduler) verwendet. In diesem Artikel betrachten wir drei gängige Ansätze und Bibliotheken zur Implementierung eines Aufgabenplaners in C++: TaskFlow, CronCpp und Boost.Asio. Sie erfahren, wie Sie das passende Werkzeug für Ihr Projekt auswählen, und sehen Codebeispiele.



Wozu braucht man einen Aufgabenplaner?

Ein Aufgabenplaner ermöglicht:

  • Das Ausführen von Hintergrundoperationen zu einer bestimmten Zeit (z. B. Cache-Bereinigung um 3:00 Uhr).
  • Das Starten periodischer Aufgaben in einem festgelegten Intervall (z. B. Sensorabfrage alle 5 Sekunden).
  • Das Verzögern der Ausführung einer Aufgabe um eine bestimmte Zeit.
  • Die Verwaltung der parallelen Ausführung von Aufgaben unter Berücksichtigung von Abhängigkeiten.


1. TaskFlow – Moderner Planer mit Aufgaben-Graph

TaskFlow ist eine Bibliothek zur Erstellung von Aufgaben-Graphen mit Unterstützung für Planung und parallele Ausführung. Sie ist besonders nützlich, wenn Aufgaben voneinander abhängen und in einer bestimmten Reihenfolge ausgeführt werden müssen.



Hauptfunktionen von TaskFlow:

  • Erstellung gerichteter azyklischer Graphen (DAG) von Aufgaben.
  • Unterstützung für bedingte und zyklische Abhängigkeiten.
  • Automatische Verteilung von Aufgaben auf Threads.
  • Integrierte Unterstützung für Timer und Verzögerungen.


Beispiel: Einfache Aufgabe mit Verzögerung

#include <taskflow/taskflow.hpp>#include <iostream>#include <chrono>

int main() { tf::Executor executor; tf::Taskflow taskflow;

// Erstellen einer Aufgabe mit einer Verzögerung von 2 Sekunden auto [A, timer] = taskflow.emplace([](){ std::cout << "Aufgabe A wurde nach 2 Sekunden ausgeführt" << std::endl; });

// Timer konfigurieren timer.name("timer"); timer.silent_delay(std::chrono::seconds(2));

// Planer starten executor.run(taskflow).wait(); return 0;}


Dieser Code erstellt eine Aufgabe, die 2 Sekunden nach dem Start des Planers ausgeführt wird. TaskFlow verwaltet Threads und Zeit automatisch.



2. CronCpp – Leichter Planer mit Cron-Syntax

CronCpp ist eine minimalistische Bibliothek zur Planung von Aufgaben nach einem Cron-Zeitplan. Sie ist ideal, wenn Sie die Ausführungszeit im bekannten Format (wie bei Linux Cron) angeben möchten.



Hauptfunktionen von CronCpp:

  • Unterstützung der Standard-Cron-Syntax (Minuten, Stunden, Tage, Monate, Wochentage).
  • Leichtgewichtig – erfordert kein Boost oder andere schwergewichtige Abhängigkeiten.
  • Einfache API zum Hinzufügen und Entfernen von Aufgaben.


Beispiel: Aufgabe jede Minute

#include <croncpp/croncpp.h>#include <iostream>#include <thread>#include <chrono>

int main() { cron::Cron cron; // Aufgabe hinzufügen, die jede Minute ausgeführt wird cron.schedule("* * * * *", [](){ std::cout << "Aufgabe wird jede Minute ausgeführt!" << std::endl; });

// Planer in einem Hintergrund-Thread starten std::thread cron_thread([&cron](){ cron.start(); });

// 5 Minuten laufen lassen std::this_thread::sleep_for(std::chrono::minutes(5)); cron.stop(); cron_thread.join(); return 0;}


In diesem Beispiel wird die Aufgabe jede Minute ausgeführt. CronCpp berechnet automatisch die nächste Startzeit und ruft die Funktion auf.



3. Boost.Asio – Leistungsstarker Planer für asynchrone Aufgaben

Boost.Asio ist nicht nur ein Planer, sondern eine vollwertige Bibliothek für asynchrone Programmierung. Ihre Timer und Aufgabenplaner werden häufig

Empfehlungen