Entrée de console non bloquante en C
En C moderne, l'entrée de console non bloquante permet une gestion transparente des commandes utilisateur pendant l'exécution du programme continue de fonctionner et de générer des informations. Cette capacité est souvent critique dans les applications interactives et les jeux.
C 11 Solution :
Un moyen efficace de mettre en œuvre une entrée de console non bloquante consiste à utiliser un fil de discussion. Cette approche permet au programme principal de continuer à s'exécuter pendant qu'un thread d'arrière-plan surveille les entrées de la console. L'exemple de code suivant illustre cette approche en utilisant C 11 :
#include
#include
#include
#include
static std::string getAnswer()
{
std::string answer;
std::cin >> answer;
return answer;
}
int main()
{
std::chrono::seconds timeout(5);
std::cout future = std::async(getAnswer);
if (future.wait_for(timeout) == std::future_status::ready)
answer = future.get();
std::cout Explication :
Dans cet exemple, la fonction getAnswer est chargée de récupérer la saisie de l'utilisateur. La fonction std::async lance un thread séparé qui exécute getAnswer et renvoie un objet std::future qui peut être utilisé pour récupérer le résultat.
Le programme principal définit un délai d'attente de 5 secondes pour attendre la saisie de l'utilisateur. . Si l'utilisateur saisit une entrée dans ce délai, le programme définit la variable de réponse sur l'entrée. Sinon, la valeur par défaut est « peut-être ».
Cette approche de saisie non bloquante permet au programme de poursuivre ses calculs et ses sorties en cours tout en répondant efficacement aux entrées de l'utilisateur. Il s'agit d'une technique puissante pour créer des applications C interactives.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3