我以前用VC++ SDK编过程序,知道它其实是用一个无限循环来实现的,程序如下:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}现在我用C#编了个程序,用Thread来实现一个无限循环,模拟VC++
private void button1_Click(object sender, EventArgs e)
{
ThreadStart ts = new ThreadStart(test);
t = new Thread(ts);
t.Start();
} public void test()
{
while (true)
{
}
}
这是一个无限循环,用一个Thread来实现,可是当我考察它们的CPU利用率的时候发现VC++那个是0%,然而C#的这个是100%。这是怎么回事?都是无限循环,为什么C#的就这么慢?我怎样才能使C#的那个无限循环Thread的CPU利用率降到可以接受的水平?多谢高手
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}现在我用C#编了个程序,用Thread来实现一个无限循环,模拟VC++
private void button1_Click(object sender, EventArgs e)
{
ThreadStart ts = new ThreadStart(test);
t = new Thread(ts);
t.Start();
} public void test()
{
while (true)
{
}
}
这是一个无限循环,用一个Thread来实现,可是当我考察它们的CPU利用率的时候发现VC++那个是0%,然而C#的这个是100%。这是怎么回事?都是无限循环,为什么C#的就这么慢?我怎样才能使C#的那个无限循环Thread的CPU利用率降到可以接受的水平?多谢高手
C#那个就是个纯正的无限循环,一个线程在那里什么也不干,一直地循环,当然就CPU利用率高了,不光C#,你用别的任何语言这么写,都是这个样子。其实在循环里加上一个Thread.Sleep(5)就没事了。
{
while (true)
{
System.Threading.Thread.Sleep(500); // 毫秒数
}
}
VC++的消息循环内部还有很多调度机制,所以不会死机,而你的只是你自己写的一个无限循环,没有这种调试机制,不死机还等什么呢……
GetMessage(&msg, NULL, 0, 0)是api ,调用他时系统会把你这个进程挂起,如何没有消息的话
不信你可以试试把
while( GetMessage(&msg, NULL, 0, 0 ) )
改为
while(1)