Tiempo de ejecución en Milisegundos, Linux

Iniciado por Castiblanco, 16 Febrero 2013, 03:50 AM

0 Miembros y 1 Visitante están viendo este tema.

Castiblanco

Hola...

Tengo un par de algoritmos y necesito saber su tiempo de ejecución, pero necesito ese tiempo en milisegundos y no se puede en segundos y dividirlos en 1000 porque se ejecutan rápido y no llegan a 1 segundo así que tienden a cero y no me sirve... Lo pude encontrar para Windows:

Código (cpp) [Seleccionar]
using namespace std;

double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
  LARGE_INTEGER freq;
  QueryPerformanceFrequency(&freq);
  return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;

main(){
       

  LARGE_INTEGER t_inicio, t_final;
  double sec;
 
int x=0, may=0;

    cout << "Ingrese X" << endl;
    cin >>x;
   
    int dato[x];
   
    for(int k=0;k<x;k++){
cout << "Ingrese dato "<<k+1<<endl;
        cin >> dato[k];
    }     

  QueryPerformanceCounter(&t_inicio);

    for(int k=0;k<x;k++){
        if (dato[k]>may){
            may = dato[k];
        }
    }

  QueryPerformanceCounter(&t_final);

  sec = performancecounter_diff(&t_final, &t_inicio);

  cout << "El mayor es: "<< endl << may << endl;
 
  printf("%.16g millisegudos\n", sec * 1000.0);
     
   system("pause");
     
}


Pero no me sirve en Linux que es donde lo necesito ya que utilizo la librería windows.h

Alguien le ha funcionado alguno, porque veo varios a través de Google pero no alguno que sirva de verdad.

Gracias!

capsulasinformaticas

#1
Aun que hasta ahora solo he programado C y practicamente nada en C++ igual me tome el trabajo de limpiar un poco el codigo, espero haberlo hecho bien. Yo te digo que por lo que se, usar sintaxis de C y C++ no es buena practica de programacion, y ademas usas System("PAUSE"); y para linux creo que ni existe ni es bueno usarlo por varias razones. Bueno, lo otro, borre lo que creo era codigo para intentar tomar el tiempo, lo cual me generaba errores en la compilacion, y puse otra forma de tomarlo que por lo menos a mi me funciona en Windows, abajo de dejo el codigo.

Código (cpp) [Seleccionar]
#include <iostream>
#include <ctime>

int main() {
    int i;
    int x = 0, mayor = 0;
    clock_t j,t;
   
    std::cout << "Ingrese X: ";
    std::cin >> x;
   
    int dato[x];
   
    j = clock();
   
    for(i=0; i<x; i++) {
std::cout << "Ingrese dato "<< i + 1 << ": ";
std::cin >> dato[i];
}

j = clock() - j;
t = clock();

for(i=0; i<x; i++)
if (dato[i] > mayor)
mayor = dato[i];

t = clock() - t;

std::cout << "\nEl Mayor es: " << mayor << "\n\n";
std::cout << "Se demoro: " << ((float)j)/CLOCKS_PER_SEC << " Segundos en ingresar los datos...\n";
std::cout << "Algoritmo para encontrar al mayor dato se demoro: " << ((float)t)/CLOCKS_PER_SEC << " Segundos\n\n";

std::cin.get();
}


Cualquier cosa avisas.

Saludos.

Castiblanco

Gracias por la intención pero esa forma tampoco me funciona :/

Me da que t vale 0, y CLOCKS_PER_SEC algo como 100000 entonces el resultado da 0 también, a mi también me funcionó algo parecido en Windows pero en Linux nada!!!

Saludos capsulasinformaticas.

0xDani

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

BatchianoISpyxolo

Para recoger la hora actual del sistema en microsegundos en C...

double microsegundos() {
struct timeval t;
if (gettimeofday(&t, NULL) < 0 )
return 0.0;
return (t.tv_usec + t.tv_sec * 1000000.0);
}


Ya sabrás tú medir los tiempos :P
Puede que desees aprender a programar desde 0: www.espascal.es