【问题标题】:How to alternate between two infinite loops? [closed]如何在两个无限循环之间交替? [关闭]
【发布时间】:2012-12-31 18:01:44
【问题描述】:

我想在两个无限循环之间交替;我怎样才能做到这一点。我的代码是这样的:

#include <stdio.h>

int main() {
    // Master loop
    while (1)

    // loop # 1
    while (1) {
        printf("I am in loop #1");
    }

    // loop # 2
    while (1) {
        printf("I am in loop #2");
    }
} // end of master loop

如何在循环 #1 和循环 #2 之间交替?我只是在测试一个想法,以检查/比较两个循环(时间)之间的一些结果,以便在时间线上找到一些偏差/故障。

【问题讨论】:

  • Ummmm....首先,您不会使内部循环无限。要么,要么break 退出第一个内部循环。
  • 不是你现在在做什么?根据定义,无限循环是……无限的。你不要打破它。 one 循环中的 if-then-else 怎么样(假设你的 real 循环比这些循环更深入)?这是用于某些状态机还是类似的?
  • 如果我按原样回答这个问题而不告诉你做其他事情,我将不得不建议goto
  • 最好解释一下您要完成的工作,即为什么需要这两个循环,然后我们可以为您提供一些答案或替代解决方案。
  • 说真的Shan。您正在创建 C++ inception!

标签: c++ c while-loop infinite-loop


【解决方案1】:

线程:

std::thread t1([]() { while(true) printf("I am in loop #1"); }),
            t2([]() { while(true) printf("I am in loop #2"); });

t1.join();
t2.join(); // only necessary if t1 is not really an infinite loop

例如,您可以修改该代码以使每个线程仅在某些条件为真时执行。

【讨论】:

【解决方案2】:

试试这个:

while (1) {
    printf("I am in loop #1");
    printf("I am in loop #2"); // Not really but let's pretend we are
}

如果你真的想要两个循环:

while (1) {
myfirstloop:
    printf("I am in loop #1");

    goto mysecondloop;
}

while (1) {
mysecondloop:
    printf("I am in loop #2");

    goto myfirstloop;
}

当然,第二个代码没有意义。但是,嘿,这是两个循环!

【讨论】:

    【解决方案3】:
    bool move = true;
    while (true) {
        while (found) {
           // do work
           if (condition) { found = false; }
        }
        while (!found) {
           // do work
           if (condition) { found = true; }
        }
    }
    

    所提供的答案可以应用于非常复杂的案例——以及您提到的简单案例。

    【讨论】:

      【解决方案4】:

      在每个内部循环中使用 break 语句将退出该循环并进入下一个循环。很简单。

      #include <stdio.h>
      
      int main() {
      // Master loop
       while (1) {
      
      // loop # 1
        while (1) {
             printf("I am in loop #1");
             if(something)
                 break;
        }
      
      // loop # 2
        while (1) {
             printf("I am in loop #2");
             if(something)
                 break;
        }
       }
      } // end of master loop
      

      【讨论】:

        【解决方案5】:
        while (1)
        {
            while (1) {
                loop1:
                printf("I am in loop #1\n");
                goto loop2;
           }
        
           while (1) {
               loop2:
               printf("I am in loop #2\n");
               goto loop1;
           }
        } 
        

        但我不得不说,最好的方法总是使用多个线程

        【讨论】:

          【解决方案6】:

          你应该有 2 个线程并有一些同步机制,如信号量等,如果你 替代的意图就像一个读者作家的问题。

          【讨论】:

          • 这个答案没有添加任何尚未说过的内容
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-19
          • 2014-01-28
          • 2015-04-13
          • 2019-01-19
          • 2016-08-16
          • 2021-12-25
          • 1970-01-01
          相关资源
          最近更新 更多