Пример #1
0
            public override void Eval(Executor exec)
            {
                Function fResultRelation = exec.PopFxn();
                Function fArgRelation = exec.PopFxn();
                Function fBaseCase = exec.PopFxn();
                Function fCondition = exec.PopFxn();

                BinRecHelper h = new BinRecHelper(exec, fResultRelation, fArgRelation, fBaseCase, fCondition);
                h.Exec();
            }
Пример #2
0
                public void Exec()
                {
                    if (!Config.gbMultiThreadBinRec)
                    {
                        LocalExec();
                        return;
                    }
                    
                    mCondition.Eval(mExec);

                    if (mExec.PopBool())
                    {
                        mBaseCase.Eval(mExec);
                    }
                    else
                    {
                        mArgRelation.Eval(mExec);

                        Executor e2;
                        e2 = new Executor();
                        e2.Push(mExec.Pop());
                        BinRecHelper h2 = new BinRecHelper(e2, mResultRelation, mArgRelation, mBaseCase, mCondition);
                        Thread t = new Thread(new ParameterizedThreadStart(LaunchThread));
                        t.Start(h2);

                        LocalExec();
                        mWait.WaitOne();
                        mExec.Push(e2.Pop());
                        mResultRelation.Eval(mExec);
                    }
                }