bonjour,

J'ai un programme dans lequel j'ai fait un thread consacré à la gestion des fonctions midi input.
Pour le midi j'utilise le module pypm (pyportmidi).
Mon code est le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import pypm
import array
import time
from threading import Thread
 
class Midi(Thread):
    def __init__(self,midion):
            Thread.__init__(self)
            pypm.Initialize()
            self.midion = midion
            self.MidiIn = None
            try :
                self.MidiIn = pypm.Input(1)
            except:
                self.exit()
 
 
    def run(self):
        while not self.MidiIn.Poll(): time.sleep(.01)
        while self.midion:
            try:
                self.MidiData = self.MidiIn.Read(1) # read only 1 message at a time
                print self.MidiData[0][0][1]," ",self.MidiData[0][0][2], self.MidiData[0][0][3]
 
            except:
                pass   
 
if __name__ == '__main__':
    m = Midi(1)
    m.start()
Mon problème est que lorsque je lance ce code seul dans une console par exemple, il s'éxécute correctement, mais lorsque je veux fermer la console la console ne se ferme pas et m'affiche :
pn_winmm_term called
begin closing open devices...
et la fermeture des interfaces ouvertes ne se fait pas et la fenêtre console finit par me dire que "ce programme n'a pas pu se terminer normalement, voulez vous le terminer maintenant, ..."
Bref une sortie assez désastreuse.

D'autre part, lorsque j'utilise ce code dans un programme, mon programme s'arrête à la ligne M.start() et ne va pas plus loin. Comme si il attendait quelque chose pour continuer.

Une idée ?