如何在popen函数中插入定时器



我有这个函数,输入是var "cmd",例如dmesg命令。

int i = 0;
char * bufferf;
bufferf = ( char * ) calloc( sizeof ( char ) , 200000 );
char buffer[1000][1280];
memset(buffer,0,1000 * 1280);
memset(bufferf,0,strlen(bufferf));
FILE* pipe = popen(cmd, "r");
if (!pipe){
    send(client_fd,"EXCEPTION",9,0);
}
while(!feof(pipe)) {
    if(fgets(buffer[i], 128, pipe) != NULL)
    {
        strcat(bufferf, buffer [i] );
    }
    i++;
}
pclose(pipe);
std::cout << bufferf ;
send(client_fd,bufferf,strlen(bufferf),0); }

。我的目标是计算while语句开始和结束之间的时间量,方法是每次添加一个变量来计算经过的时间。

例如dmesg是~700行输出。while运行了700次,我必须加上700倍的时间来计算总和。我该怎么做呢?我试过用difftime,但效果不太好。还有其他解决方案吗?

谢谢。

您可以创建一个非常基本的类,使用clock()来测量时间:

#include <ctime>
class Timer
{
   private:
      clock_t _start, _duration;
   public:
      Timer() : _start(0), _duration(0) { }
      void start() { _start = clock(); }
      void stop() { _duration = clock() - _start; }     
      float getTime() { return (float)_duration / CLOCKS_PER_SEC; }
};

如果想以毫秒为单位显示时间,显然要乘以1000。

然后只是:

Timer t;
t.start();
// do something
t.stop();
cout << "Duration: " << t.getTime() << endl;

同时,请注意sarnold所说的,buffer是巨大的。

最新更新