blob: 7549baceab21efd05aa40bffe6608d7f3a50b9f6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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__
|