A seção 5.7 introduziu as funções cue e sync para lidar com problemas de sincronização de threads. O que não foi explicado é que é o sistema de Time State que fornece esta funcionalidade. É de tal forma que set is na realidade uma variação de cuee foi construído de forma que possa trabalhar perfeitamente com o Time State - qualquer informaçãoque nós planejamos armazenar no Time State nós podemos sincronizar. Em outras palavras - nós sincronizamos synceventos que ainda serão inseridos no Time State.
Vamos dar uma olhada em como usar sync para esperar por novos eventos que serão inseridos ao Time State:
in_thread do
sync :foo
sample :ambi_lunar_land
end
sleep 2
set :foo, 1
Neste exemplo nós primeiro criamos uma thread que espera um evento :foo ser adicionado ao Time State. Após a declaração desta thread, nós esperamos por 2 batidas e então setamos (set) :foo para ser 1. Isso libera a sincronização (sync) que então segue para a próxima linha que dispara a amostra :ambi_lunar_land.
Note que sync sempre espera por eventos futuros e isso irá bloquear a a thread atual esperando por um novo evento. Também, irá herdar o tempo lógico da thread que chamou a sincronização através de set ou cue então pode também ser usado para sincronizar tempo.
No exemplo acima nós configuramos :foo igual a 1 e não fizemos nada com isso. Nós podemos, na verdade, recuperar este valor na thread chamando sync:
in_thread do
amp = sync :foo
sample :ambi_lunar_land, amp: amp
end
sleep 2
set :foo, 0.5
Note que valores que são passados através de set e cue devem ser seguros - i.e. Rings imutáveis, números, símbolos ou strings congeladas. O Sonic Pi irá gerar um erro se o valor que você está tentando armazenar no Time State não for válido.