48 System.Reflection.ConstructorInfo[] constructors = typeof(global::java.lang.management.ThreadInfo).GetConstructors(
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic);
49 foreach (
System.Reflection.ConstructorInfo constructor in constructors)
51 if (constructor.GetParameters().Length == 9)
53 global::java.lang.Thread[] threads = (global::java.lang.Thread[])
getThreads();
54 global::java.lang.management.ThreadInfo[] threadInfos = (global::java.lang.management.ThreadInfo[])result;
55 for (
int i = 0; i < ids.Length; i++)
58 for (
int t = 0; t < threads.Length; t++)
60 if (threads[t].getId() ==
id)
62 global::java.lang.Thread thread = threads[t];
66 switch (thread.getState().ordinal())
68 case (
int)global::java.lang.Thread.State.__Enum.RUNNABLE:
69 state = JVMTI_THREAD_STATE_RUNNABLE;
71 case (
int)global::java.lang.Thread.State.__Enum.BLOCKED:
72 state = JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER;
74 case (
int)global::java.lang.Thread.State.__Enum.WAITING:
75 state = JVMTI_THREAD_STATE_WAITING_INDEFINITELY;
77 case (
int)global::java.lang.Thread.State.__Enum.TIMED_WAITING:
78 state = JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT;
80 case (
int)global::java.lang.Thread.State.__Enum.TERMINATED:
81 state = JVMTI_THREAD_STATE_TERMINATED;
83 case (
int)global::java.lang.Thread.State.__Enum.NEW:
84 state = JVMTI_THREAD_STATE_ALIVE;
92 global::java.lang.StackTraceElement[] stacktrace = thread.getStackTrace();
93 if (maxDepth >= 0 && maxDepth < stacktrace.Length)
95 global::java.lang.StackTraceElement[] temp =
new global::java.lang.StackTraceElement[maxDepth];
96 System.Array.Copy(stacktrace, temp, temp.Length);
100 object[] parameters =
new object[9];
101 parameters[0] = thread;
102 parameters[1] = state;
109 parameters[8] = stacktrace;
110 threadInfos[i] = (global::java.lang.management.ThreadInfo)constructor.Invoke(parameters);
118 throw new global::java.lang.InternalError(
"Constructor for java.lang.management.ThreadInfo not find.");
134 int currentId = GetCurrentThreadId();
135 System.Diagnostics.ProcessThreadCollection threads =
System.Diagnostics.Process.GetCurrentProcess().Threads;
136 foreach (
System.Diagnostics.ProcessThread t in threads)
138 if (t.Id == currentId)
140 return (
long)(t.TotalProcessorTime.Ticks * 100);
147 throw new System.NotImplementedException(
"Only current Thread is supported.");