コード例 #1
0
        public static void ilkDelegateBildirimleri()
        {
            Console.WriteLine("Hello World!");

            //Delegelerden nesne alabilirim -> Başlangıç methoduna, method adresi verelim ve tutsun
            Proc1 p1 = new Proc1(Console.WriteLine);

            p1("Hello World!");

            //p1(10); int ile çağıramassın tabiki

            //new demeden de atama yapılabildi
            p1 = Console.WriteLine;
            p1("TUGBERK");

            //2 sayının min bulalım
            int result = Math.Min(2, 3);

            Console.WriteLine(result);

            //p2 Math.Min adresini tutuyor.
            Proc2 p2 = Math.Min;

            Console.WriteLine(p2(2, 3));
        }
コード例 #2
0
        /// <summary>
        /// 引数付きのタイマー関数を登録する
        /// </summary>
        /// <param name="id">受信時の引数</param>
        /// <param name="delay_ms">起動ミリ秒</param>
        /// <param name="function">起動する関数</param>
        public Handle AddTrigger(object arg, int delay_ms, Proc1 function)
        {
            uSet   st  = new uSet(null, function, arg);
            Handle ret = new Handle(delay_ms, new TimerCallback(_onTimer), st);

            st[0] = ret;
            return(ret);
        }
コード例 #3
0
        /// <summary>
        /// タイマー実行
        /// </summary>
        /// <param name="arg"></param>
        private void _onTimer(object arg)
        {
            uSet val = (uSet)arg;

            ((Handle)val[0])._stop();


            // 型に応じた処理
            if (val[1] is Proc0)
            {
                Proc0 p = (Proc0)val[1];
                try
                {
                    p.Method.Invoke(p.Target, null);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message + " " + p.Method.Name);
                }
                return;
            }
            if (val[1] is Proc1)
            {
                Proc1 p = (Proc1)val[1];
                try
                {
                    p.Method.Invoke(p.Target, new object[] { val[2] });
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message + " " + p.Method.Name);
                }
                return;
            }
            if (val[1] is ProcN)
            {
                ProcN p = (ProcN)val[1];
                try
                {
                    p.Method.Invoke(p.Target, (object[])val[2]);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message + " " + p.Method.Name);
                }
                return;
            }
            System.Diagnostics.Debug.Assert(false, "タイマー致命的エラー");
        }
コード例 #4
0
 public bool ProcessTransact(Transact transact)
 {
     if (Proc1.Time <= transact.Time)
     {
         DeQueueTransact(transact);
         Proc1.ProcessTransact(transact);
         PostProcess(transact);
         return(true);
     }
     if (Proc2.Time <= transact.Time)
     {
         DeQueueTransact(transact);
         Proc2.ProcessTransact(transact);
         PostProcess(transact);
         return(true);
     }
     transact.Time = (Proc1.Time < Proc2.Time) ? Proc1.Time : Proc2.Time;
     return(false);
 }
コード例 #5
0
 /// <summary>
 /// 引数付きのタイマー関数を登録する
 /// </summary>
 /// <param name="id">受信時の引数</param>
 /// <param name="delayTime">起動時間</param>
 /// <param name="function">起動する関数</param>
 public Handle AddTrigger(object arg, uTime delayTime, Proc1 function)
 {
     return(AddTrigger(arg, delayTime.TotalSeconds * 1000, function));
 }
コード例 #6
0
        /// <summary>
        /// 引数付きのタイマー関数を登録する
        /// </summary>
        /// <param name="id">受信時の引数</param>
        /// <param name="delay_ms">起動ミリ秒</param>
        /// <param name="function">起動する関数</param>
        public Handle AddTrigger(object arg, int delay_ms, Proc1 function)
        {
            Handle ret = _createHandle(delay_ms, function, new object[] { arg });

            return(ret);
        }