Comment effectuer une programmation asynchrone en code C++ ?
Dans le domaine du développement logiciel, la programmation asynchrone est devenue l'une des compétences nécessaires. Il peut mieux équilibrer les performances des opérations gourmandes en CPU et des opérations gourmandes en E/S, permettant au code du programme d'être exécuté simultanément ou en parallèle, améliorant ainsi la vitesse de réponse et les performances globales du programme. Actuellement, la programmation asynchrone est largement utilisée dans de nombreuses plates-formes et langages de programmation. Le langage C++ est un langage de programmation performant, et son mode de programmation asynchrone a également été largement utilisé dans de nombreux projets. Cet article présentera la méthode de programmation asynchrone du langage C++, dans l'espoir d'aider tout le monde à maîtriser la programmation asynchrone.
Méthodes de programmation asynchrone en C++11
La norme C++11 introduit std::async pour la programmation asynchrone. La fonction std::async est utilisée pour démarrer un nouveau thread et renvoyer un objet std::future représentant le résultat d'un calcul asynchrone. La fonction est définie comme suit :
template< class Function, class... Args > future::type> async( launch policy, Function&& f, Args&&... args );
Parmi eux, le paramètre Policy est la stratégie de lancement. Les options sont std::launch::async et std::launch::deferred. La première signifie démarrer le calcul asynchrone immédiatement, et ce dernier signifie retarder le début du calcul asynchrone ; le paramètre f est la fonction ou l'objet fonction à exécuter ; le paramètre args est les paramètres de la fonction ou de l'objet fonction ;
L'exemple de code d'utilisation de std::async pour la programmation asynchrone est le suivant :
#include#include #include #include using namespace std; int async_func(int x, int y) { cout << "async_func start." << endl; std::this_thread::sleep_for(std::chrono::seconds(1)); cout << "async_func end." << endl; return x + y; } int main() { std::future result = std::async(std::launch::async, async_func, 1, 2); cout << "main func start." << endl; std::this_thread::sleep_for(std::chrono::seconds(2)); cout << "main func end." << endl; int res = result.get(); cout << "result: " << res << endl; return 0; }
Dans ce code, nous utilisons std::async pour ouvrir un thread de calcul asynchrone, exécuter la fonction async_func de manière asynchrone et transmettre les valeurs des paramètres x et y respectivement Pour 1 et 2, le résultat du calcul est finalement renvoyé. Dans le thread principal, nous avons d'abord fait une pause de 2 secondes, et une fois l'exécution du thread de calcul asynchrone terminée, nous avons obtenu les résultats du calcul et les avons imprimés.
En exécutant le code ci-dessus, le résultat de sortie est le suivant :
async_func start. main func start. async_func end. main func end. result: 3
Il ressort du résultat de sortie que pendant le processus de calcul asynchrone, le thread principal ne bloquera pas, mais continuera à exécuter le code suivant. De plus, il convient de noter que si le programme lève une exception lors d'un calcul asynchrone, si l'exception n'est pas gérée, le programme plantera.
Méthode de programmation asynchrone du minuteur en C++
En plus d'utiliser std::async pour la programmation asynchrone, C++ fournit également d'autres méthodes de programmation asynchrone, telles que l'utilisation de la minuterie système pour la programmation asynchrone. Une minuterie est un mécanisme courant dans les systèmes d'exploitation, utilisé pour déclencher un événement ou effectuer une tâche à intervalles réguliers. En C++, nous pouvons utiliser les fonctions associées dans les bibliothèques std::chrono et std::thread pour implémenter la programmation asynchrone du timer, comme indiqué ci-dessous :
#include#include #include void timer_func() { std::cout << "timer func called." << std::endl; } int main() { int delay_time = 200; std::chrono::milliseconds delay(delay_time); while(true) { std::cout << "wait for " << delay_time << " milliseconds." << std::endl; std::this_thread::sleep_for(delay); timer_func(); } return 0; }
Dans cet exemple de programme, nous utilisons la fonction std::this_thread::sleep_for , simule un délai de 20 millisecondes, et une fois le délai terminé, la fonction timer_func est déclenchée, réalisant une programmation asynchrone de la minuterie. En exécutant le code ci-dessus, le temps d'attente peut être imprimé en continu dans le terminal et « la fonction de minuterie appelée est périodiquement affichée ».
Il convient de noter que la précision et les performances de la minuterie sont facilement affectées par divers facteurs, tels que la charge du système d'exploitation, la précision de l'heure du système, etc. Par conséquent, dans les applications réelles, s’il existe des exigences spécifiques en temps réel, certaines optimisations et ajustements doivent être effectués.
Conclusion
La programmation asynchrone est devenue l'une des compétences essentielles en développement logiciel. Dans le langage C++, nous pouvons utiliser des mécanismes tels que std::async et des timers système pour implémenter une programmation asynchrone. Dans la programmation réelle, l'utilisation de la programmation asynchrone peut mieux utiliser les processeurs multicœurs, améliorer les performances parallèles ou simultanées du code et réduire le temps de réponse du code. Cet article présente uniquement les connaissances de base de la programmation asynchrone. L'application réelle doit être complétée par un mécanisme multi-thread, un mécanisme de synchronisation des threads et d'autres technologies. Les applications pratiques nécessitent une compréhension et une maîtrise approfondies des technologies associées pour éviter les erreurs de programme et les problèmes de performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!