Le titre peut être un peu vague. C'est ce que je veux dire:Attente de deux entrées dans Haskell, simultanément
Dites que j'ai deux façons d'obtenir des informations sur mon programme. Le premier est via le clavier, en utilisant la fonction getLine
qui bloque jusqu'à ce qu'une ligne soit lue. L'autre est, disons, via un TChan
, où l'utilisation readTChan chan
entraînera également un bloc jusqu'à ce qu'une valeur soit présente dans le canal, après quoi il sera lu. Ce que je veux accomplir est d'être en mesure d'attendre les deux valeurs, en utilisant un seul thread et ne permettant pas à mon processeur de sauter à 100%. Au moment où l'une des deux valeurs est disponible, elle est récupérée et le programme reprend. (Dites, en utilisant Either
pour indiquer laquelle des deux valeurs a été reçue.)
Est-ce possible?
Merci beaucoup!
Que diriez-vous d'avoir un appel IO-fil getLine, et mettre le résultat dans le Tchan ainsi? Ça me semble que ça devrait marcher .. – yairchu
Pourquoi exactement voulez-vous utiliser un seul fil? Que se passerait-il si, par exemple, vous n'attendriez pas trois entrées? Ou 5? Ou 10? Pourquoi les restrictions arbitraires? – ADEpt
Je suppose que vous avez du code où plusieurs threads étaient utilisés et que vous aviez 100% CPU? Vous souhaiterez peut-être publier le code afin que les autres puissent voir pourquoi: la solution correcte est les threads et il peut s'agir simplement d'un problème d'implémentation. – Godeke