使用线程编程的Client Server

时间:2013-03-16 10:24:30

标签: c pthreads client-server

我正在研究客户端服务器代码,其中客户端有两个线程在运行;我希望这两个线程连续运行60秒。但是,我面临两个问题。

首先,当我在main()中运行for循环时,retail_thread()正在生成与应生成随机数相同的数字,而bulk_thread()正在生成。其次,我无法在60秒内完成运行for循环的想法。

由于这是一个家庭作业问题,如果不是确切的解决方案,我将非常感谢任何提示或帮助。请忽略拼写错误。

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()仅用于创建套接字并将数据发送到服务器。

1 个答案:

答案 0 :(得分: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);
  }

[EDITED] 要运行一个60秒的线程你可以试试这个:

time_t end = time(NULL) + 60;
while (time(NULL) <= end)
{
    … // do something
}