1

1秒あたり100回の呼び出しを送信し、60秒ごとに1秒あたり200回の呼び出しを増やす関数を作成しようとしています。コードは以下のとおりです

for (i = 1; i <= 240; i++) {
        for (j = 0; j <= 100; j++) {
          send_tcp();
        }
        sleep(1);
        if(i %60 == 0) j=j+200;
        else j = j*1;
}

send_tcp()は基本的にソケットを開き、TCPを特定のアドレスに送信します。問題は、j = 100の場合、毎秒正しく送信されることです。ただし、j = 300の場合、300 tcpを送信するのに3秒かかり、500tcp要求を送信するのに10秒かかります。基本的にjが番号に入ると、jコール/秒を取得できません。

これは単なる論理的な間違いだと思いますが、jの番号に関係なく、1秒あたりのJ呼び出しの送信方法がわかりません...

どんな反応にも感謝します

-英語が下手で申し訳ありませんが、基本的には「send_tcp」/秒のj番号を実行する必要があります。ただし、Jが大きくなると、「send_tcp」のJ数は/秒ではなく、/3秒以上になるように見えます。

4

2 に答える 2

2

はい、論理エラーがあります。ループカウンターを必要な反復回数と混同しています。これは、代わりに行う必要があることです。

int n_calls = 100;
for (i = 1; i <= 240; i++) {
        for (j = 0; j < n_calls; j++) {
          send_tcp();
        }
        sleep(1);
        if(i %60 == 0) n_calls+=200;

}
于 2012-04-04T14:01:16.400 に答える
1

forあなたはいつも0から100までの秒でループします、それは101回です。Jの値を変更しますが、for開始時に値をJ再び0に設定します。あなたが何をしたいのか理解できれば、それは増加したsend_tcpときに呼び出される回数を変更することです。i次に、コードを次のようなものに変更する必要があります。

count_j=100;
for (i = 1; i <= 240; i++) {
        for (j = 0; j <= count_j; j++) {
          send_tcp();
        }
        sleep(1);
        if(i %60 == 0) count_j+=200;

}

それはあなたが望むものですか?

于 2012-04-04T14:02:43.327 に答える