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)); }
/// <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); }
/// <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, "タイマー致命的エラー"); }
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); }
/// <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)); }
/// <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); }