t1 / TFDContents / Assets / Standard Assets / EventPump.cs @ 10
이력 | 보기 | 이력해설 | 다운로드 (2.11 KB)
| 1 | 3 | KTH | #if !(UNITY_WSA_10_0 && NETFX_CORE) |
|---|---|---|---|
| 2 | using System; |
||
| 3 | using System.Collections.Generic; |
||
| 4 | using System.Runtime.InteropServices; |
||
| 5 | using System.Linq; |
||
| 6 | |||
| 7 | namespace Helper |
||
| 8 | {
|
||
| 9 | internal class EventPump : UnityEngine.MonoBehaviour |
||
| 10 | {
|
||
| 11 | private static object s_Lock = new object(); |
||
| 12 | private Queue<Action> m_Queue = new Queue<Action>(); |
||
| 13 | |||
| 14 | public static EventPump Instance |
||
| 15 | {
|
||
| 16 | get; |
||
| 17 | private set; |
||
| 18 | } |
||
| 19 | |||
| 20 | public static void EnsureInitialized() |
||
| 21 | {
|
||
| 22 | try |
||
| 23 | {
|
||
| 24 | if (EventPump.Instance == null) |
||
| 25 | {
|
||
| 26 | lock (s_Lock) |
||
| 27 | {
|
||
| 28 | if (EventPump.Instance == null) |
||
| 29 | {
|
||
| 30 | UnityEngine.GameObject parent = new UnityEngine.GameObject("Kinect Desktop Event Pump");
|
||
| 31 | EventPump.Instance = parent.AddComponent<Helper.EventPump>(); |
||
| 32 | DontDestroyOnLoad(parent); |
||
| 33 | } |
||
| 34 | } |
||
| 35 | } |
||
| 36 | } |
||
| 37 | catch |
||
| 38 | {
|
||
| 39 | UnityEngine.Debug.LogError("Events must be registered on the main thread.");
|
||
| 40 | return; |
||
| 41 | } |
||
| 42 | } |
||
| 43 | |||
| 44 | private void Update() |
||
| 45 | {
|
||
| 46 | lock (m_Queue) |
||
| 47 | {
|
||
| 48 | while (m_Queue.Count > 0) |
||
| 49 | {
|
||
| 50 | var action = m_Queue.Dequeue(); |
||
| 51 | try |
||
| 52 | {
|
||
| 53 | action.Invoke(); |
||
| 54 | } |
||
| 55 | catch { }
|
||
| 56 | } |
||
| 57 | } |
||
| 58 | } |
||
| 59 | |||
| 60 | private void OnApplicationQuit() |
||
| 61 | {
|
||
| 62 | var sensor = Windows.Kinect.KinectSensor.GetDefault(); |
||
| 63 | if (sensor != null && sensor.IsOpen) |
||
| 64 | {
|
||
| 65 | sensor.Close(); |
||
| 66 | } |
||
| 67 | |||
| 68 | NativeObjectCache.Flush(); |
||
| 69 | } |
||
| 70 | |||
| 71 | public void Enqueue(Action action) |
||
| 72 | {
|
||
| 73 | lock (m_Queue) |
||
| 74 | {
|
||
| 75 | m_Queue.Enqueue(action); |
||
| 76 | } |
||
| 77 | } |
||
| 78 | } |
||
| 79 | } |
||
| 80 | #endif |