public class Tests
{
+ private static int mainThreadId;
+
public static int Main ()
{
+ mainThreadId = Thread.CurrentThread.ManagedThreadId;
return TestDriver.RunTests (typeof (Tests));
}
Thread.CurrentThread.Priority.ToString());
}
+ public static int test_0_main_thread_priority ()
+ {
+ Console.WriteLine("Testing main thread's priority");
+ if (Thread.CurrentThread.ManagedThreadId != mainThreadId)
+ {
+ Console.WriteLine("test_0_main_thread_priority() must be run on the main thread");
+ return 1;
+ }
+
+ var before = Thread.CurrentThread.Priority;
+ Console.WriteLine("Priority: {0}", before);
+ if (before != ThreadPriority.Normal)
+ return 2;
+
+ Console.WriteLine("Setting main thread's priority to AboveNormal");
+ Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;
+ var after = Thread.CurrentThread.Priority;
+ Console.WriteLine("Priority: {0} {1}", before, after);
+ if (after != ThreadPriority.AboveNormal)
+ return 3;
+
+ before = after;
+ Console.WriteLine("Setting main thread's priority to BelowNormal");
+ Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
+ after = Thread.CurrentThread.Priority;
+ Console.WriteLine("Priority: {0} {1}", before, after);
+ if (after != ThreadPriority.BelowNormal)
+ return 4;
+
+ before = after;
+ Console.WriteLine("Setting main thread's priority to Normal");
+ Thread.CurrentThread.Priority = ThreadPriority.Normal;
+ after = Thread.CurrentThread.Priority;
+ Console.WriteLine("Priority: {0} {1}", before, after);
+ if (after != ThreadPriority.Normal)
+ return 5;
+
+ return 0;
+ }
+
public static int test_0_thread_priority ()
{
int res = 0;
void
mono_threads_suspend_register (MonoThreadInfo *info)
{
+ g_assert (!info->handle);
+ info->handle = mono_threads_platform_open_handle();
}
void
typedef struct {
LPTHREAD_START_ROUTINE start_routine;
void *arg;
+ gint32 priority;
MonoCoopSem registered;
gboolean suspend;
HANDLE suspend_event;
info->runtime_thread = TRUE;
info->create_suspended = suspend;
+ mono_threads_platform_set_priority(info, start_info->priority);
+
mono_coop_sem_post (&(start_info->registered));
if (suspend) {
return NULL;
mono_coop_sem_init (&(start_info->registered), 0);
start_info->arg = arg;
+ start_info->priority = tp->priority;
start_info->start_routine = start_routine;
start_info->suspend = creation_flags & CREATE_SUSPENDED;
creation_flags &= ~CREATE_SUSPENDED;
MonoThreadPriority
mono_threads_platform_get_priority (MonoThreadInfo *info)
{
+ g_assert (info->handle);
return GetThreadPriority (info->handle) + 2;
}
gboolean
mono_threads_platform_set_priority (MonoThreadInfo *info, MonoThreadPriority priority)
{
+ g_assert (info->handle);
return SetThreadPriority (info->handle, priority - 2);
}