wƒWebFront C++23
EN ↗GitHub ↗

Notions complémentaires / WEBFRONT

C++ moderne et asynchronisme

Durée de vie, coroutines et annulation.

La durée de vie avant la syntaxe

WebFront est header-only et demande C++23. Un callback enregistré peut vivre plus longtemps que la fonction qui l’a enregistré : ses captures doivent rester valides. Ne capturez pas par référence une variable locale détruite avant le callback. L’application possède ses callbacks et doit rester vivante pendant leur usage.

Une coroutine n’est pas un thread

C++20 introduit co_await : une coroutine peut suspendre son exécution en attendant une opération. Elle ne rend pas automatiquement un calcul CPU non bloquant. Les tâches applicatives WebFront retournent webfront::Task et démarrent avec app.spawn(task) ou ui.spawn(task). L’application les possède et les draine avant destruction.

Choisir un résultat asynchrone

L’extrait suivant suppose un ui valide et une fonction JavaScript getTitle enregistrée. Le sender typé transmet l’annulation locale via le jeton d’arrêt de la coroutine. Une tâche conserve son TaskHandle pour demander un arrêt individuel. Annuler localement ne stoppe pas le JavaScript déjà lancé. Les futures et Promises n’offrent pas cette annulation, et il n’y a pas de timeout automatique.

C++23
// Inside a webfront::Task coroutine:
auto title = co_await ui.jsFunctionSender<std::string>("getTitle")();

Question

co_await crée-t-il automatiquement un thread ?