namespace testThread
{ public class Form1 : System.Windows.Forms.Form
{ private Thread myThread1;
private Thread myThread2; public Form1()
{
InitializeComponent();
                           myThread1 = new Thread(new ThreadStart(runMyThread));
myThread1.Start();
myThread2 = new Thread(new ThreadStart(runMyThread2));
myThread2.Start();
myThread2.Suspend();
}
private void runMyThread()
{
while(true)
{
int a = 10;
                                     Thread.Sleep(10000);   //A
}
}
private void runMyThread2()
{
while(true)
{
int b=10;
MessageBox.Show("thread2");
}
} protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null) 
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
                           ......
}
[STAThread]
static void Main() 
{
Application.Run(new Form1());
}
}
}A行处的sleep运行过程中,系统狂占CPU,CPU100%,而此时线程2并未运行。请问此时CPU在执行什么操作?实在是不解。如果不启动线程2,只有线程1时,A行处的Sleep操作并不占CPU。请问是何故?

解决方案 »

  1.   

    Dim T1 As Thread
        Dim T2 As Thread
        Dim a As Integer = 0
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            T1 = New Thread(AddressOf Me.ThSub1)
            T1.Start()
            T2 = New Thread(AddressOf Me.ThSub2)
            T2.Start()
        End Sub
        Private Sub ThSub1()
            While True
                a = a + 1
                SyncLock Me
                    Me.TextBox1.Text = a.ToString
                End SyncLock
                ' Console.Write(a.ToString)
                Thread.Sleep(1000)
            End While
        End Sub    Private Sub ThSub2()
            While True
                a = a - 1
                SyncLock Me
                    Me.TextBox1.Text = a.ToString
                End SyncLock
                'Console.Write(a.ToString)
                Thread.Sleep(2000)
            End While    End Sub    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            T1.Abort()
            T2.Abort()
        End Sub
    End Class
    写了一段,没发现任何问题..
      

  2.   

    这时候cpu占用100%应该是个假象,你可以同时随意运行其它任何程序,看速度受不受影响。实际上如果cpu真的占用100%的话,你整个操作系统都动弹不得了。
      

  3.   

    btw,实际上myThread1这时候已经堵塞了。
      

  4.   

    多次追踪原因,发现是在用VS2003调试运行时,会发生此现象。如果是直接运行可执行程序,就不会发生。真是奇怪!VS到底在搞什么东东