0

我一直在做一个任务,要求我们实现一些提供给我们的代码,允许创建可以通信的服务器和客户端。我打算在 main 中分叉一个进程,然后测试各种可用的请求选项,然后通过子进程或本地使用函数测量执行此操作所需的时间差异。我不确定我是否正确解释了这些要求。最重要的是,所有计时函数都返回 0 秒。不确定这是否正确。我将发布一小部分代码。

作业陈述(仅一小部分):

测量请求的调用延迟(即从调用请求到响应返回之间的时间。)将其与向接受请求并返回回复的函数提交相同请求字符串的时间进行比较(与一个单独的过程做同样的事情)。提交一份比较两者的报告。

main之前声明的函数:

string myfunc(string request){
  //string myreq = request;
  RequestChannel my_func_channel("control", RequestChannel::CLIENT_SIDE);
  string reply1 = my_func_channel.send_request(request);
  return reply1;
}

以及我如何解释代码中的方向:

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

  //time variables
  time_t start, end;
  double time_req_1, time_req_func;

  cout << "client.C  Starting...\n" << flush;
  cout << "Forking new process...\n " << flush;      
  pid_t childpid = fork();

  if(childpid == -1)
    cout << "Failed to fork.\n" << flush;
  else if(childpid == 0){
    cout << "***Loading Dataserver...\n" << flush;
    //Load dataserver   
    RequestChannel my_channel("control", RequestChannel::CLIENT_SIDE);
    cout << "***Dataserver Loaded.\n" << flush;

    time(&start);
    string reply1 = my_channel.send_request("hello");
    cout << "***Reply to request 'hello' is '" << reply1 << "'\n" << flush;
    time(&end);
    time_req_1 = difftime(end,start);  

    cout <<"\n\nRequest 1 took     :  "<< time_req_1 << flush;

  }
  else{//parent
    time(&start);
    string s = myfunc("hello");
    time(&end);
    time_req_func = difftime(end,start);
    cout <<"\nmyfunc Request took:  "<< time_req_func << "\n" << flush;

  }
  usleep(1000000);
}

这是我的代码的缩写版本,但包含了你需要弄清楚发生了什么的一切。我做了指示说明的事情吗?另外,我的 0 秒结果可能是正确的吗?

4

1 回答 1

0

做一次所花费的时间可能(可能)太小而无法衡量,所以要计算多次执行所需的时间,然后计算出每次花费的时间。

于 2012-07-14T01:39:51.903 回答