Bonjour,
En schématisant voici mon appli:
Une forme avec un bouton
un object Thread.
A chaque appui du bouton on lance le même thread:
Dans l'objet thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UnThread:=TMidiThread.Create(True); UnThread.FreeOnTerminate:=True; UnThread.Priority:= tpnormal; UnThread.Resume;
la fonction pause a été crée pour éviter le sleep qui est bloquant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 .... procedure TMidiThread.PlayMidi ; pause(1000); traitement ; end; procedure TMidiThread.Execute; begin Synchronize(PlayMidi) ; end; ....
Le résultat des courses c'est que si je clique assez rapidement plusieurs fois sur le bouton, je m'aperçois que les threads démarrent correctement mais qu'ils sont interronmpus par le suivant et doivent attendre que ce dernier finisse pour qu'il puisse finir leur traitement. Je ne sais pas si je suis trés clair dans ma prose alors je joins un schéma.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function TMidiThread.Pause(ms : integer) : integer; var hbms : integer; begin hbms := GetTickCount + ms; repeat Application.ProcessMessages; until GetTickCount >= hbms ; result:= 0 ; end;
En haut ce que je voudrais obtenir, en bas ce que j'ai. Les barres verticales symbolisent les clicks.
Je précise que je débute avec les threads donc j'imagine qu'il me manquent pas mal de concepts
Merci de vos lumières
Partager