-5

2 つの無限ループを交互に繰り返したい。どうすればこれを達成できますか。私のコードは次のようなものです:

#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 を交互に切り替えるにはどうすればよいですか? タイムラインの偏差/障害を見つけるために、時間内の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
}

真剣に 2 つのループが必要な場合:

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

    goto mysecondloop;
}

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

    goto myfirstloop;
}

もちろん、2 番目のコードは意味がありません。でもねえ、それは 2 つのループです !

于 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 に答える