public void Notify(bool result)
        {
            //Console.WriteLine("[StateControl.Notify] Finalização notificada- state:{0}]", stateId);
            BranchInterpreter branch;

            elseResult = elseResult || result;
            count--;
            int rid = protocol.Matrix [stateId] [((iterations + 1) * Configuration.BASE) + Configuration.RUNNABLE];

            if (count == 0 && !elseResult && rid != Configuration.NOTHING)
            {
                //Esse objeto morre. count = iterations + 1; //reinicio a contagem, caso haja uma nova exeucao do estado.
                //Console.WriteLine("[StateControl.Notify] Criado BranchInterpreter- state:{0} | iteracao(-1):{1}", stateId, iterations);
                branch = new BranchInterpreter(stateId, iterations + 1, this);
                ThreadPool.QueueUserWorkItem(branch.Go, null);
            }
        }
        //Dispara a execução do estado.
        public void Go()
        {
            //artifício para suspender a execução do estado nos casos de reconfiguração.
            ManualResetEvent resetEvent = protocol.getResetEvent(stateId);

            if (ConfigurationManager.N)
            {
                //Console.WriteLine ("[StateControl.Go] STATE: " + stateId);

                if (resetEvent != null)
                {
                    Console.WriteLine("[StateControl.Go] DORMIU: estado " + stateId);
                    WaitHandle.WaitAll(new ManualResetEvent[] { resetEvent });
                    Console.WriteLine("[StateControl.Go] ACORDOU: estado " + stateId);
                }
            }

            Dictionary <int, int> transitions = protocol.Matrix [stateId];
            BranchInterpreter     branch;

            //a última transição será considerada o "else".
            this.count      = (transitions.Count / Configuration.BASE) - 1;
            this.elseResult = false;

            if (transitions [Configuration.RUNNABLE] != Configuration.END)
            {
                count      = (count == 0 ? 1 : count);
                iterations = count - 1;

                for (int i = 0; i <= iterations; i++)
                {
                    branch = new BranchInterpreter(stateId, i, this);
                    ThreadPool.QueueUserWorkItem(branch.Go, null);
                }
            }
            else
            {
                //Console.WriteLine("[StateControl.Go] Sinaliza Final!");
                protocol.doneEvent.Set();
                //StateControl: Execução finalizada!
            }
        }