您的位置:首页 > 运维架构 > Linux

一个计时类,可以同时用在windows 和 linux 环境下

2015-09-10 16:14 555 查看

local_timer.h

#ifndef LOCAL_TIMER_H
#define LOCAL_TIMER_H

#include <time.h>

#ifdef LINUX
#include <sys/time.h>
#else
#include <windows.h>
#endif

class local_timer
{
private:
#ifdef LINUX
struct timeval ts,te;
#else
__int64 ts, te;
#endif
double  frq, ms_elapse;

public:
void start();
void stop();
double ms_get();
local_timer();
void out(const char * str);
virtual ~local_timer();
};
#endif


local_timer.cpp

#include <string.h>
#include <stdio.h>
#include "local_timer.h"

local_timer::local_timer()
{
// TODO Auto-generated constructor stub
ms_elapse = 0;
memset(&ts, 0, sizeof(ts));
memset(&te, 0, sizeof(te));

#ifdef LINUX
frq = CLOCKS_PER_SEC;
#else
LARGE_INTEGER  large_interger;
QueryPerformanceFrequency(&large_interger);
frq = (double)large_interger.QuadPart;
#endif
}

local_timer::~local_timer()
{
// TODO Auto-generated destructor stub
}

void local_timer::start(void)
{
#ifdef LINUX
gettimeofday(&ts,NULL);
#else
LARGE_INTEGER  large_interger;
QueryPerformanceCounter(&large_interger);
ts = large_interger.QuadPart;
#endif
}

void local_timer::stop(void)
{
#ifdef LINUX
gettimeofday(&te,NULL);
double tt = 1000000 * (te.tv_sec - ts.tv_sec) + te.tv_usec - ts.tv_usec;
ms_elapse = tt / 1000.;
#else
LARGE_INTEGER  large_interger;
QueryPerformanceCounter(&large_interger);
te = large_interger.QuadPart;
double tt = (double)(te - ts);
ms_elapse = tt*1000.0 / frq;
#endif
}

double local_timer::ms_get(void)
{
return ms_elapse;
}

void local_timer::out(const char * str)
{
stop();
printf("%s used:%f\r\n", str, ms_elapse);
}


使用方法

#include "cuda_runtime_api.h"
#include "device_launch_parameters.h"

#include <math.h>
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "local_timer.h"

using namespace cv;

uchar image_buf[640*480];
cv::Mat image(480, 640, CV_8UC1, image_buf);
//cv::Mat display(480, 640, CV_8UC1);

int main(int argc, char **argv)
{
FILE * video_stream;
int frame_cnt = 200;

#ifdef LINUX
setenv("DISPLAY",":0",0);
char *dir = "./gray.yuv";
#else
char *dir = "F:\\video\\gray.yuv";
#endif

video_stream = fopen(dir,"rb");
gpu::GpuMat image_device(480,640,CV_8UC1);
gpu::GpuMat edge_device(480,640,CV_8UC1);
local_timer tick;

tick.start();
Sleep(800);
tick.out("sleep 800");

while (frame_cnt--) {
fread(image_buf, 1, 640 * 480, video_stream);

if (frame_cnt < 100) {
tick.start();
cudaMemcpy2D(image_device.data, image_device.step, image_buf, 640, 640, 480, cudaMemcpyHostToDevice);
gpu::Canny(image_device,edge_device,100,60);
cudaMemcpy2D(image_buf, 640, edge_device.data, edge_device.step, 640, 480, cudaMemcpyDeviceToHost);
tick.out("gpu");
cv::imshow("calculate by gpu", image);
} else {
tick.start();
cv::Mat edge;
cv::Canny(image, edge, 100, 60);
tick.out("cpu");
cv::imshow("calculate by cpu", edge);
}

cvWaitKey(30);
}

fclose(video_stream);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows linux class