コード例 #1
0
        public void PushContext()
        {
            System.Diagnostics.Debug.Assert(m_Kernel.InKernelMode());

            long count = Interlocked.Add(ref m_SuspendFlag, SUSPEND_FLAG_KERNEL_REQUEST) - SUSPEND_FLAG_KERNEL_REQUEST;

            System.Diagnostics.Debug.Assert((count & SUSPEND_FLAG_KERNEL_REQUEST) == 0);

            if (count == SUSPEND_FLAG_DELAY_SUSPEND)
            {
                for (; ;)
                {
                    switch (m_SuspendFlag & (SUSPEND_FLAG_DELAY_SUSPEND | SUSPEND_FLAG_END_DELAY | SUSPEND_FLAG_SUSPENDING))
                    {
                    case 0:
                        m_Thread.Suspend();
                        break;

                    case SUSPEND_FLAG_END_DELAY:
                        continue;

                    case SUSPEND_FLAG_SUSPENDING:
                    default:
                        break;
                    }
                    break;
                }
            }
        }