by mdr1 » 29 Mar 2011, 08:07
Bisam wrote:Ce que tu décris est bien compliqué, mdr1, pour quelqu'un qui semble débuter.
L'idée que suggérait Critor est de faire une boucle rapide dans laquelle, au bout d'un certain nombre de passages, tu fais quelque chose (bouger des objets par exemple).
Si tu as besoin de connaître l'état du clavier, tu peux dans cette boucle en faire une autre dont le nombre de passages dépend du nombre de passage dans la boucle extérieure afin que l'exécution de tes "interruptions" se fassent quand même à intervalles réguliers.
Cela demande un peu de tests pour les divers paramètres de temporisation mais ça fonctionne assez bien pour des exemples simples.
Je ne débute pas (à moins que tu ne parles pas de moi ?). Bien sûr que l'on peut faire comme tu l'as dit, et cela se montre même plus simple dans le cas étudié.
Cependant, ça peut tout de même être pratique de simuler des threads. Pour ce faire, il faut déjà savoir utiliser les interruptions (je conseille de faire la routine en asm car les interruptions doivent être rapides. De toutes façons, on n'a même pas le choix car il faut jouer sur le stack).
Donc on active l'interruption, on lui envoie dans une variable quelque par dans la RAM l'adresse du stack du 2e thread en y mettant en haut de la pile l'adresse du thread puis la valeur des variables, par exemple (save), et on peut continuer l'exécution. L'interruption, quant à elle, va, à chaque fois qu'elle sera appelée, commencer par pusher tous les registres dans le stack, ensuite, elle échange SP avec (save) : on a ainsi le SP de l'autre thread. Il ne reste plus qu'à poper dans les registres puis à faire reti : ça va aller dans le deuxième thread car le haut de la pile est l'adresse de celui-ci.