-5

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

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

4

6 回答 6

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

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

于 2012-12-31T18:29:33.743 回答
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;
}

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

于 2012-12-31T18:03:15.780 回答
2

在每个内部循环中使用 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
于 2012-12-31T18:52:40.880 回答
2
bool move = true;
while (true) {
    while (found) {
       // do work
       if (condition) { found = false; }
    }
    while (!found) {
       // do work
       if (condition) { found = true; }
    }
}

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

于 2012-12-31T18:04:45.853 回答
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;
   }
} 

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

于 2012-12-31T18:09:44.447 回答
-1

如果您的备用意图类似于读写器问题,您应该有 2 个线程并具有一些同步机制,如信号量等。

于 2012-12-31T18:25:17.307 回答