本帖最后由 hetengfei_ 于 2011-12-20 23:47:58 编辑

解决方案 »

  1.   

    #1楼 的 贴子不成功,
    看来CSDN 的安全方面 做的不错啊!
      

  2.   

    怎么可能Thread.Sleep呢?你阻塞了主线程,让它无法腾出时间来处理别的工作,这纯粹是画蛇添足。可能你的本意是多线程操作画面上的处理,但是那可不能使用Thread.Sleep啊。
      

  3.   


       要达到非常好的效果,本想下面做的。
    做法: 
    键盘+Mouse 线程A
    声明       线程B
    主线程C   先 开辟一片内存,这为(后续)每帧画面   的队例(假定10 帧(以每秒20帧的速度,就算主线程被卡了 0.5 秒也可以通畅))。
    timer 的timer_tick 作为画片的更新 (主线程引起)
    再用Monitor 来同步 A B C 三个线程。
    (本想用 以上方式来设计的,这样会涉及 几大我不懂的)
    一:线程间通迅
    二:因主线程C 要进行画图计算,还要控制 缓存队例,发消息到 声控线程B ,还有timer_tick 所以要使他占用更多的CUP 时间比。
      

  4.   

     线程B ----->声 线程B
      

  5.   


    我给你写个建议吧,不算是回答,因为我也不专业,怕被吐槽啊。1.如果使用多线程,那只用线程去更改数据,而不更改界面。
    2.Sleep真的不要用了,这个很麻烦,计时会受到计算机性能的影响。
    使用Timer或实现一个阻塞来判断主界面是否需要更新。如果设置可以跳帧(游戏设置里经常会有),那么用Stopwatch来修正Timer,如果不给跳帧选项,就不用修正了。
    3.主界面的重绘和更新(更新数据如果用其他线程来操作,要控制好同一帧界面数据的同步)是个while(true),因为游戏来说,本身就是个死循环。
    4.如果使用多线程,每个可移动的单位最好都使用独自的线程;如果不想这么做,就不用多线程,这是可以的,因为1/24秒,计算机可以做的事情超乎你的想象。
    5.不要用任何阻塞操作,除非阻塞操作不会影响游戏的过程(同时阻塞while(true))。
    6.锁帧/非锁帧与按需更新while(shouldUpdate)//锁帧.非锁帧使用while(true)
    {
      Update();
    }void Update()
    {
       //...收集数据的改变
       Repaint();
    }
    void Repaint()
    {
      //...更新界面
    }//按需更新
    void Update()//需要更新的时候,调用即可
    {
        //收集数据更改
        Repaint();
    }void Repaint()
    {
       //更新主界面
    }
      

  6.   


    使用Timer进行更新的话,不用while(true),将Update放入CallBack即可。