2

クライアントで2つのスレッドが実行されているクライアントサーバーコードに取り組んでいます。これらのスレッドを両方とも60秒間継続して実行したいと思います。しかし、私は2つの問題に直面しています。

まず、でforループを実行しているときmain()retail_thread()は、生成しているのと同じ数を生成します。代わりに、乱数を生成する必要がありbulk_thread()ます。次に、forループを正確に60秒実行するというアイデアを得ることができません。

それは宿題の問題なので、正確な解決策ではないにしても、ヒントや支援をいただければ幸いです。タイプミスがある場合は無視してください。

int main(int argc, char *argv[]) {

    int pt,i;
    pthread_t thread;
    /* n a very large number */
    /* run below code for 60 seconds */

    for(i=0;i<n;i++)
    {
        pt = pthread_create(&thread, NULL, retail_thread, (void*) NULL);
        bulk_thread(NULL);
    }
}

void* retail_thread(void* ){
    srand(time(NULL));                       
    int order_size = rand()%20 + 1;         
    printf("in retail \n ");
    sendtoserver_R(RETAIL_PORT,order_size);
    int wait_time = 100 + (5*order_size);
    printf("Retail thread order = %d and execution fully completed \n\n",order_size);
}

void* bulk_thread(void* ){
    srand(time(NULL));                      
    int order_size = rand()%90 + 10;        
    printf("in bulk \n");
    int wait_time = 100 + (5*order_size);
    sendtoserver_B(BULK_PORT,order_size);

    printf("Bulk thread order = %d and execution fully completed \n\n",order_size);
}

sendtoserver()ソケットを作成してサーバーにデータを送信するためだけのものです。

4

1 に答える 1

3

さて、私は最初の問題は次のとおりだと思います:

// Seed the RNG once, at the start of the program
srand(time(NULL));  

void* retail_thread(void* ){
    //srand(time(NULL));                       
    int order_size = rand()%20 + 1;         
    printf("in retail \n ");
    sendtoserver_R(RETAIL_PORT,order_size);
    int wait_time = 100 + (5*order_size);
    printf("Retail thread order = %d and execution fully completed \n\n",order_size);
  }

[編集]スレッドを60秒間実行するには、次のことを試してください。

time_t end = time(NULL) + 60;
while (time(NULL) <= end)
{
    … // do something
}
于 2013-03-16T10:30:33.483 に答える