如何在两个无限循环之间交替?

时间:2012-12-31 18:01:45

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

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

#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之间切换?我只是测试一个想法来检查/比较两个循环时间(时间)之间的一些结果,以便在时间线中找到一些偏差/错误。

6 个答案:

答案 0 :(得分:6)

主题:

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

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

答案 1 :(得分:3)

试试这个:

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;
}

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

答案 2 :(得分:2)

bool move = true;
while (true) {
    while (found) {
       // do work
       if (condition) { found = false; }
    }
    while (!found) {
       // do work
       if (condition) { found = true; }
    }
}

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

答案 3 :(得分:1)

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;
   }
} 

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

答案 4 :(得分:1)

在每个内部循环中使用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 :(得分:-1)

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