代码之家  ›  专栏  ›  技术社区  ›  StepHan

当我尝试递增并打印循环中的数字时,程序停止响应

  •  0
  • StepHan  · 技术社区  · 7 年前

    C# :

    void Update () {
        for (int m=0;m<122132343243243;m++)
        {
            print(m);
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Serlite Gandalf StormCrow    7 年前

    你的代码的主要问题是你要求计算机一次完成大量的工作,所以它停止响应。数到122万亿是一项漫长的任务,其本身至少需要20天(见 Counting up to one trillion 只是因为你打印了每个数字。

    你需要做的是允许计算机通过使用 coroutines (您可以使用另一个线程来防止锁定,但协程是解决此问题的更简单的统一方法。)

    void Start() {
        StartCoroutine("CountAndPrint");
    }
    
    IEnumerator CountAndPrint() {
        for (long m=0; m<122132343243243; m++) {
            print(m);
            yield return null;
        }
    }
    

    注意:我也切换了 long 用于 int ,正如Daniel所指出的 m

    这段代码的主要区别在于,它基本上允许程序在每次计数后“暂停”方法的执行,将剩余的工作留到以后的帧中。这将允许您在计数器增加时继续与程序交互。