summaryrefslogtreecommitdiff
path: root/Runtime/Mono/MonoScopedThreadAttach.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Mono/MonoScopedThreadAttach.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Mono/MonoScopedThreadAttach.h')
-rw-r--r--Runtime/Mono/MonoScopedThreadAttach.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/Runtime/Mono/MonoScopedThreadAttach.h b/Runtime/Mono/MonoScopedThreadAttach.h
new file mode 100644
index 0000000..7549bac
--- /dev/null
+++ b/Runtime/Mono/MonoScopedThreadAttach.h
@@ -0,0 +1,52 @@
+/*
+ * MonoScopedThreadAttach.h
+ * AllTargets.workspace
+ *
+ * Created by Søren Christiansen on 8/23/11.
+ * Copyright 2011 Unity Technologies. All rights reserved.
+ *
+ */
+#ifndef __UNITY_MONOSCOPEDTHREADATTACH_H__
+#define __UNITY_MONOSCOPEDTHREADATTACH_H__
+
+#if SUPPORT_MONO_THREADS
+
+#include "Runtime/Threads/Thread.h"
+
+#define MAX_ATTACHED_THREADS 4
+
+struct MonoDomain;
+struct MonoThread;
+
+Thread::ThreadID AttachMonoThread(MonoDomain* domain);
+bool DetachMonoThread(Thread::ThreadID threadID);
+
+struct attached_thread
+{
+ Thread::ThreadID threadID;
+ MonoThread* thread;
+ int refCount;
+};
+
+struct ScopedThreadAttach
+{
+ ScopedThreadAttach(MonoDomain* domain) : threadID(0)
+ {
+ Assert(domain);
+ if (!Thread::CurrentThreadIsMainThread())
+ threadID = AttachMonoThread(domain);
+ }
+ ~ScopedThreadAttach()
+ {
+ if (threadID)
+ DetachMonoThread(threadID);
+ }
+
+private:
+ ScopedThreadAttach(const ScopedThreadAttach& other);
+ void operator=(const ScopedThreadAttach& other);
+ Thread::ThreadID threadID;
+};
+
+#endif // SUPPORT_MONO_THREADS
+#endif // __UNITY_MONOSCOPEDTHREADATTACH_H__