예제 #1
1
 public void PostDelayed(AMCMsg.Runner runnable, long delay)
 {
     AMCMsg msg = new AMCMsg();
     msg.targetTime = Util.DelayMs(delay);
     msg.SetTarget(this);
     msg.Runnable = runnable;
     SendAtTime(msg, msg.targetTime);
 }
예제 #2
0
 public void Post(AMCMsg.Runner runnable)
 {
     AMCMsg msg = new AMCMsg();
     msg.SetTarget(this);
     msg.Runnable = runnable;
     msg.targetTime = Util.NowMs;
     Send(msg);
 }
예제 #3
0
 public override void HandleMessage(AMCMsg msg)
 {
     Debug.WriteLine("Handler1 to process message " + msg.what + " at ticket " +
         Util.GetMilliseconds(DateTime.Now.Ticks));
     switch (msg.what)
     {
         case 1:
             break;
         case 2:
             break;
         case 3:
             Debug.WriteLine("3:" + msg.obj);
             break;
         case 4:
             Debug.WriteLine("4:" + msg.GetData().get<String>("key", null));
             break;
         default:
             Debug.WriteLine("Unknown message " + msg.what);
             break;
     }
 }
예제 #4
0
 internal void Add(AMCMsg message)
 {
     if (message.used)
     {
         throw new InvalidOperationException("one AMCMsg can not be add to queue multiple times");
     }
     lock(_messages){
         message.used = true;
         _messages.Add(message);
         Monitor.PulseAll(_messages);
     }
 }
예제 #5
0
 public void SendAtTime(AMCMsg message, long time)
 {
     message.targetTime = time;
     message.SetTarget(this);
     _looper.Add(message);
 }
예제 #6
0
 public void Send(AMCMsg message, long delay)
 {
     SendAtTime(message, Util.DelayMs(delay));
 }
예제 #7
0
 public void Send(AMCMsg message)
 {
     SendAtTime(message, Util.NowMs);
 }
예제 #8
0
 public virtual void HandleMessage(AMCMsg message)
 {
 }
예제 #9
0
 public void WaitProcess(AMCMsg message)
 {
     message.waiter = new Object();
     SendAtTime(message, Util.NowMs);
     lock (message.waiter)
     {
         Monitor.Wait(message.waiter);
     }
 }
예제 #10
0
 public void WaitProcess(string what)
 {
     AMCMsg message = new AMCMsg(what);
     message.waiter = new Object();
     SendAtTime(message, Util.NowMs);
     lock (message.waiter)
     {
         Monitor.Wait(message.waiter);
     }
 }