Ejemplo n.º 1
0
        private static int AddTimer(TIMER timer)
        {
            int handle = 0;

            do
            {
                handle = Interlocked.Increment(ref g_AutoincrementHandle);
                if (handle < 0)
                {
                    handle = 0;
                }
            } while (!g_HandleTable.TryAdd(handle, timer)); // HANDLE碰撞
            return(handle);
        }
Ejemplo n.º 2
0
 static NSJSPinnedCollection()
 {
     maintenanceTimer       = NSJSTimerScheduler.New();
     maintenanceTimer.Tick += (sender, e) =>
     {
         foreach (PinnedContext context in contexts.Values)
         {
             if (context == null || context.LifeCycle == Infinite)
             {
                 continue;
             }
             if (((DateTime.Now - context.PinnedTime).TotalMilliseconds) > context.LifeCycle)
             {
                 Release(context.Address);
             }
         }
     };
     maintenanceTimer.Interval = 100;
     maintenanceTimer.Enabled  = true;
 }
Ejemplo n.º 3
0
        private static void SetTimer(IntPtr info, bool period)
        {
            NSJSFunctionCallbackInfo arguments = NSJSFunctionCallbackInfo.From(info);
            int handle = -1;

            if (arguments.Length > 1)
            {
                NSJSFunction callback = arguments[0] as NSJSFunction;
                NSJSInt32    millisec = arguments[1] as NSJSInt32;
                if (callback != null && millisec != null && millisec.Value >= 0)
                {
                    NSJSVirtualMachine machine = arguments.VirtualMachine;
                    callback.CrossThreading = true;
                    TIMER             timer = NSJSTimerScheduler.New(arguments.VirtualMachine);
                    IList <NSJSValue> argv  = new List <NSJSValue>();
                    for (int i = 2; i < arguments.Length; i++)
                    {
                        NSJSValue item = arguments[i];
                        item.CrossThreading = true;
                        argv.Add(item);
                    }
                    timer.Tick += (sender, e) =>
                    {
                        if (!period)
                        {
                            CloseTimer(handle);
                        }
                        machine.Join((sendert, statet) => callback.Call(argv));
                    };
                    handle         = AddTimer(timer);
                    timer.Interval = millisec.Value;
                    timer.Enabled  = true;
                }
            }
            arguments.SetReturnValue(handle);
        }