Sync

La section 5.7 a introduit les fonctions cue et sync lorsque nous rencontrons des problèmes de synchronisation de fils d’exécution. Ce qui n’y était pas expliqué était qu’il s’agit du système d’État du Temps qui permet cette fonctionnalité. Enfaite, la fonction set est une variation de cue et est construite sur la même fonctionnalité de base qui est d’insérer de l’information dans le système d’État du Temps. De plus, sync a été créé d’une façon qui lui permet de travailler parfaitement avec l’État du Temps - toute information que nous prévoyons stocker dans l’État du Temps, nous pouvons la synchroniser.

Attendre pour les événements

Regardons rapidement comment utiliser sync pour attendre que de nouveaux événements soient ajoutés à l’État du Temps :

in_thread do
  sync :foo
  sample :ambi_lunar_land
end
sleep 2
set :foo, 1

Dans cet exemple, nous commençons par créer un fil d’exécution qui attend pour qu’un événement :foo soit ajouté à l’État du Temps. Après la déclaration du fil d’exécution, nous dormons pour deux rythmes et nous set :foo à 1. Cela relâche ensuite le sync qui se rend ensuite à la prochaine ligne qui est de déclencher l’exemple :ambi_lunar_land.

Noter que sync attend toujours pour des événements futurs et qu’il bloque le fil d’exécution actuel en attendant ce nouvel événement. Également, il va hériter du temps logique du fil d’exécution qui est déclenché par set ou cue, donc il peut être utilisé également pour synchroniser le temps.

Transférer des valeurs dans le Futur

Dans l’exemple ci-dessus, nous avons affecté 1 à :foo et en avons rien fait. Nous pouvons obtenir cette valeur à partir du fil d’exécution en appelant sync :

in_thread do
  amp = sync :foo
  sample :ambi_lunar_land, amp: amp
end
sleep 2
set :foo, 0.5

Notez que les valeurs transférées au travers de set et cue doivent être protégées des fils d’exécution - c’est-à-dire des anneaux immuables, des nombres, des symboles ou des chaînes de caractères fixes. Sonic Pi lancera une erreur si la valeur que vous essayez de stocker dans l’État du Temps n’est pas valide.