在网上看了答案,自己改了一下,结果不是很满意
    class Win32
    {        [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
        public static extern int SetThreadAffinityMask(IntPtr hWnd, int nIndex);  
    } IntPtr nHD = new IntPtr(Thread.CurrentThread.ManagedThreadId);
            Win32.SetThreadAffinityMask(nHD, 0x00000000);            const double SPLIT = 0.01;
            const int COUNT = 200;
            const double PI = 3.14159265;
            const int INTERVAL = 300;//May be height            int[] busySpan = new int[COUNT];
            int[] idleSpan = new int[COUNT];
            int half = INTERVAL / 2;
            double radian = 0.0;                for (int i = 0; i < COUNT; i++)
            {
                busySpan[i] = (int)((half + (Math.Sin(PI * radian) * half)));
                idleSpan[i] = INTERVAL - busySpan[i];
                radian += SPLIT;
            }
            int startTime = 0;
            int j = 0;
            
            while (true)
            {
                j = j % COUNT;
                startTime = Environment.TickCount;
                while ((Environment.TickCount - startTime) <= busySpan[j])
                {
                    
                }
                Thread.Sleep(idleSpan[j]);
                j++;
            }
结果:曲线很不好看,尽管是正弦了问题
1、我用的是双核CPU,用一个死循环,可以让CPU稳定在50%左右,是为什么? 
   我猜测一个CPU管用户进程,另一个管着系统进程,但是后面用上面代码,两个CPU图都显示为正弦。。晕了
2、Win32.SetThreadAffinityMask(nHD, 0x00000000),让进程在第一个CPU上运行,但是不管我怎么调第二个参数,得到的结果都是一样的,WHY?
3、怎么样让曲线更回平滑?
   上面的INTERVIAL也就是一个时间调度单位,在这个时间内,有一个忙和闲的比例。理论上说,
    1)COUNT数值越大,randian越小,所得到的点就越多
    2)INTERVAL时间越短,表示出的图样就越精细,在0~PI/2之间,INT值表示的比例在多大范围里面可以接受?比如:INTERVAL = 10,那么根本不可          能得到精确的点,但是INTERVAL越大,如2000MS那么图像就基本快没形状态
    3)
        while ((Environment.TickCount - startTime) <= busySpan[j])
                {
                    
                }
        执行busySpan[j]次,对应豪秒数是多少?sleep(idleSpan[i]),可是结结实实停了那么多豪秒,它们之间的比例还能准切吗?
 
各位大拿,多多发表看法~