Comment gérer les principaux événements de presse en c++
Je suis en train d'écrire un personnalisé programme de console. Et je veux la faire ressembler à un réel. Je tiens donc à lier certaines actions avec les événements de pression de touche.
Par exemple lorsque la flèche est pressé précédemment exécuté les commandes doivent être présentés à l'utilisateur. Je sais que sur SDL. Mais je pense que ce n'est pas une bibliothèque standard, est-il ??
Si il y a d'autres alternatives, inclus dans la norme RPC de la bibliothèque, s'il vous plaît laissez-moi savoir.
Grâce.
Quel est ton OS ? Et choisir C ou C++, ne pas baliser les deux à la fois.
Vous ne pouvez pas faire cela avec de la bibliothèque standard (
C'est l'OS de personne à charge.
c'est Ubuntu 12.x. et Si vous pouvez faire quelque chose en c alors évidemment, vous pouvez le faire en c++ aussi.
Oui, et tout ce que vous pouvez le faire en C et C++, vous pouvez également le faire en assembleur. Cela ne signifie pas que vous devriez ajouter ce tag aussi. Le point est que vous faire des choses très autrement en C et C++ depuis qu'ils sont langages de programmation. Par conséquent, les réponses seront différentes, en fonction de celle que vous utilisez. Nous pensons que sur la base des balises.
Vous ne pouvez pas faire cela avec de la bibliothèque standard (
c
ou c++
). Vous avez besoin d'une autre bibliothèque ou d'os utilitaires. Vous pouvez utiliser le readline de la bibliothèque pour la manipulation de l'historique des entrées sur Linux, par exemple.C'est l'OS de personne à charge.
c'est Ubuntu 12.x. et Si vous pouvez faire quelque chose en c alors évidemment, vous pouvez le faire en c++ aussi.
Oui, et tout ce que vous pouvez le faire en C et C++, vous pouvez également le faire en assembleur. Cela ne signifie pas que vous devriez ajouter ce tag aussi. Le point est que vous faire des choses très autrement en C et C++ depuis qu'ils sont langages de programmation. Par conséquent, les réponses seront différentes, en fonction de celle que vous utilisez. Nous pensons que sur la base des balises.
OriginalL'auteur Amit Bhaira | 2013-07-06
Vous devez vous connecter pour publier un commentaire.
Vous ne trouverez rien dans la bibliothèque standard. Tout dépend de la Plateforme. Dans Windows, vous avez des fonctions comme
GetAsyncKeyState
pour obtenir l'état d'une touche sur le clavier par exemple.SDL et SFML les deux ont de la plate-forme indépendante de la gestion des événements.
Pas de. Il aurait à gérer que sur son propre. Ces ne seraient utilisées que pour la gestion des données, la gestion de la fenêtre et le rendu du texte (en Supposant qu'il fait complètement console personnalisée à partir de zéro, indépendant de l'OS de la console).
c'est ok je vais le faire .. donc je doit aller de l'avant avec la SDL.
Cela dépend de ce que vous êtes le plus à l'aise avec. SDL a une API C (fonctions, les structures, pointeurs partout) tandis que la SFML est une API C++ (classes, l'utilisation de références à la place des pointeurs, etc...)
En fait j'ai l'intention d'avoir deux threads dans ce scénario, le premier thread sera bloqué dans getline(cin,tampon) et un autre va rester à l'écoute pour les clés de la presse. Dès que l'utilisateur aura touché (up ou down), il aura l'impression d'un déjà utilisé la commande, de plus il va remplir la mémoire tampon(doute ici, cin peut le faire ou pas ?? Dans ce scénario), de la première du fil. Et lorsque l'utilisateur va cliquer sur enter premier thread va se réveiller et faire son travail. Ça va être une bonne approche? Ou pouvez-vous m'en suggérer un autre ??
OriginalL'auteur Mohamad Ali Baydoun
Ce que vous décrivez n'est pas un "programme de console" en soi, mais un shell.
Aussi, vous ne voulez pas gérer les événements, plutôt de simplement le lire à partir de la ligne de commande.
Pour ce faire, il existe différentes façons. Windows a ReadConsoleInput.
Le moyen plus souple mais est-ce un avec getline.
De vous faire quelque chose de spécial de travail que vous avez simplement à stocker les précédentes entrées dans un
std::vector<string>
ou similaire.De lire les entrées brutes (sans écho) à partir de la console, vous devez utiliser _getch()
getline
est la meilleure façon de traiter les choses simples de la lecture, mais il ne fait pas ce que la question se pose.OriginalL'auteur poitroae