Čas doby zápisu do souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Čas doby zápisu do souboru – C / C++ – Fórum – Programujte.comČas doby zápisu do souboru – C / C++ – Fórum – Programujte.com

 

ORION2060
Newbie
3. 5. 2017   #1
-
0
-

Zdravím,

pokouším se změřit čas, za jaký mi program projeden daný kód. Nejprve jsem zkusil:

int start = clock();
//kód
int stop = clock();
cas = ((stop - start)/(CLOCKS_PER_SEC));

Ale ikdyž popřád pracuji se stejným zdrojovým souborem, a při stejné práci mi to hází docela velké odchylky (až v minutách), čemuž moc nerozumím. Tak jsem zkusil zapsat do souboru datum vytvoření souboru v době vytvoření prázdného souboru:

#define DatumFormat "%d.%m.%Y %H:%M:%S "
#define DatumVelikost 21
static char *DATUM(char *buff) 
{
	time_t t = time(0);
	strftime(buff, DatumVelikost, DatumFormat, localtime(&t));
	return buff;
}

A pak podobné vyvolat na konci programu:

time_t tt = time(0);
struct tm*now = localtime(&tt);
char DATUM_1[80];
strftime(DATUM_1, DatumVelikost, DatumFormat, localtime(&tt));

Ale ve výsledném souboru mám pořád stejné datum (jako to první) při založení souboru. Čemuž nerozumím, když druhý čas time_t tt načítám třeba o 10 minut později. Neporadí prosím někdo? Děkuji.

Nahlásit jako SPAM
IP: 91.139.6.–
Jerry
~ Anonymní uživatel
512 příspěvků
3. 5. 2017   #2
-
0
-

#1 ORION206
a nemělo by to bejt nějak takhle

http://stackoverflow.com/questions/3557221/how-do-i-measure-time-in-c

http://stackoverflow.com/questions/13156031/measuring-time-in-c

http://stackoverflow.com/questions/16764276/measuring-time-in-millisecond-precision

http://stackoverflow.com/questions/2808398/easily-measure-elapsed-time

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:15a7:...–
ORION2060
Newbie
4. 5. 2017   #3
-
0
-

Ahoj,

všechny odkazy řeší víceméně můj první uváděný příkaz, který mi taky jakš takš funguje. Spíše mě zajímá proč, když vyvolám time_t na různých pozicích v kodu (tedy v rozdílný čas), ve finálním logu mi to vypíše ten čas, ve kterém byl program spuštěn.

Nahlásit jako SPAM
IP: 91.139.6.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 5. 2017   #4
-
0
-

A kde v tom jde vyčíst, co přesně děláš?

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
4. 5. 2017   #5
-
0
-

Jses si jist, ze pri tom zapisu travis tolik casu, aby to bylo s presnosti na sekundy poznat?

O kodu se radeji ani nebudu zminovat. Alespon ze zvladas odsazovani.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ORION2060
Newbie
4. 5. 2017   #6
-
0
-

Omyl jsem kod smazal.

#include "stdafx.h"
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
#include <string>
#include <sstream>
#include <time.h>
#include <ctime>

const int COLUMNS = 7;

struct radek
{
	float x;															
	float y;																
	float z;																
	float odrazivost;														
	float r;																	
	float g;
	float b;
};


using namespace std;

radek MakeRow(float pole[7])
{
	radek soucasnejRadek;
	soucasnejRadek.x = pole[0];
	soucasnejRadek.y = pole[1];
	soucasnejRadek.z = pole[2];
	soucasnejRadek.odrazivost = pole[3];
	soucasnejRadek.r = pole[4];
	soucasnejRadek.g = pole[5];
	soucasnejRadek.b = pole[6];

	return soucasnejRadek;
}

#define DatumFormat "%d.%m.%Y %H:%M:%S "
#define DatumVelikost 21
#define DatumFormat2 "%d.%m.%Y %H:%M:%S "
#define DatumVelikost2 21
static char *DATUM(char *buff) 
{
	time_t t = time(0);
	strftime(buff, DatumVelikost, DatumFormat, localtime(&t));
	return buff;
}

float main() 
{
	char volba;
	char format;
	char format2;

	float mez_X[2];
	float mez_Y[2];
	float mez_Z[2];

	int odrazivost[2];

	int barva_r[2];
	int barva_g[2];
	int barva_b[2];

	int pocetRadku;

	char date[DatumVelikost];
	//char date1[DatumVelikost2];

	int cas;

	cout << "Pokud chcete vysledny soubor dle souradnic stiknete S.\n";
	cout << "Pokud chcete vysledny soubor dle odrazivosti stiknete O.\n";
	cout << "Pokud chcete vysledny soubor dle barev stiknete R.\n";
	cout << "Pokud chcete vysledny soubor dle souradnic a odrazivosti vyberte variantu A.\n";
	cout << "Pokud chcete vysledny soubor dle souradnic a barev vyberte variantu B.\n";
	cout << "Pokud chcete vysledny soubor dle odrazivosti a barev vyberte variantu C.\n";
	cout << "Pokud chcete vysledny soubor dle souradnic, odrazivosti a barev vyberte variantu D.\n";

	cin >> volba;
	cin.get();


// PODMINKA PRO SOURADNICE - S
	if (volba=='S'|| volba=='s')
	{
		std::string filename;
		std::string filenameOUT = "Vysledek_Cisla_Dle_Souradnic";
		cout << "Zadejte jmeno souboru, ze ktereho chcete nacitat data.\n";
		getline(cin, filename);
		cout << endl;
		cout << "Zadejte format nacitaneho souboru: \n";
		cout << "(1) - .pts\n";
		cout << "(2) - .txt\n";
		cout << "(3) - .rcp\n";
		cout << "(4) - .rcs\n";

		cin >> format;
		switch (format)
		{
		case '1':
			filename += ".pts";
			cout << "Byl vybran format .pts.\n";
			break;
		case '2':
			filename += ".txt";
			cout << "Byl vybran format .txt.\n";
			break;
		case '3':
			filename += ".rcp";
			cout << "Byl vybran format .rcp.\n";
			break;
		case '4':
			filename += ".rcs";
			cout << "Byl vybran format .rcs.\n";
			break;
		}
		cout << endl;
		cout << "Zadejte format vysledneho souboru: \n";
		cout << "(1) - .pts\n";
		cout << "(2) - .txt\n";
		cout << "(3) - .rcp\n";
		cout << "(4) - .rcs\n";

		cin >> format2;
		switch (format2)
		{
		case '1':
			filenameOUT += ".pts";
			cout << "Byl vybran format .pts.\n";
			break;
		case '2':
			filenameOUT += ".txt";
			cout << "Byl vybran format .txt.\n";
			break;
		case '3':
			filenameOUT += ".rcp";
			cout << "Byl vybran format .rcp.\n";
			break;
		case '4':
			filenameOUT += ".rcs";
			cout << "Byl vybran format .rcs.\n";
			break;
		}

		std::ifstream ifs(filename.c_str(), std::ifstream::in);
		std::ofstream ofs(filenameOUT.c_str(), std::ofstream::out);

		cout << endl;
		cout << "Zadejte souradnice pro vytvoreni souboru (x,y,z)\n";
		cout << "Zadejte mez X: (nejpreve zapornou a pak kladnou)\n";
		cin >> mez_X[0];
		cin >> mez_X[1];
		cout << "Zadejte mez Y:\n";
		cin >> mez_Y[0];
		cin >> mez_Y[1];
		cout << "Zadejte mez Z:\n";
		cin >> mez_Z[0];
		cin >> mez_Z[1];
		cout << "Meze zadany, nasleduje vytvareni souboru.\n";

		time_t start = time(NULL);
		int start1 = clock();

		int a = 0;

		if (ifs.is_open() && ofs.is_open())
		{
			std::string line;
			while (std::getline(ifs, line))
			{
				std::istringstream ss(line);							
				radek soucasnejRadek;

				if (!(ss >> soucasnejRadek.x >> soucasnejRadek.y >> soucasnejRadek.z >> soucasnejRadek.odrazivost >> soucasnejRadek.r >> soucasnejRadek.g >> soucasnejRadek.b))
				{
					continue;
				}

				if (mez_X[0] <= soucasnejRadek.x && mez_X[1] >= soucasnejRadek.x)												
				{
					if (mez_Y[0] <= soucasnejRadek.y && mez_Y[1] >= soucasnejRadek.y)
					{
						if (mez_Z[0] <= soucasnejRadek.z && mez_Z[1] >= soucasnejRadek.z)
						{
							a++;
							pocetRadku = a;
							ofs << soucasnejRadek.x << " " << soucasnejRadek.y << " " << soucasnejRadek.z << " " << soucasnejRadek.odrazivost << " " << soucasnejRadek.r << " " << soucasnejRadek.g << " " << soucasnejRadek.b << '\n'; 
						}

					}

				}


			}
			ifs.close();
			ofs.close();
		}
		else
		{
			std::cout << "Error opening file";
		}

	//LOG soubor souradnic
		time_t tt = time(0);
		struct tm*now = localtime(&tt);
		char DATUM_1[80];
		strftime(DATUM_1, DatumVelikost2, DatumFormat2, now);
	
		int stop = clock();
		cas = ((stop - start1) / (CLOCKS_PER_SEC));
		
		cout << "Vysledny soubor vytvoren.\n";
		cout << "Nasleduje zapis LOG souboru.\n";

		std::ofstream ofss("LOG_Cisla_Dle_Souradnic.txt", std::ofstream::out);

		ofss << "Informace o vyslednem souboru vytvoreneho dle mezi souradnic:\n";
		ofss << "Pouzite meze souradnic: \n" << "Mez X: " << "<" << mez_X[0] << "; " << mez_X[1] << ">\n" << "Mez Y: " << "<" << mez_Y[0] << "; " << mez_Y[1] << ">\n" << "Mez Z: " << "<" << mez_Z[0] << "; " << mez_Z[1] << ">\n";
		ofss << "Pocet bodu v tomto souboru: " << pocetRadku << "\n";
		ofss << "Zacatek vytvoreni souboru: " << DATUM(date) << "\n";
		ofss << "Konec vytvoreni souboru: " << DATUM_1 << "\n";
		ofss << "Cas tvoreni souboru: " << (double)(time(NULL)-start) << " s" << "\n";
		ofss << endl;

		cout << "LOG soubor byl vytvoren.\n";
		cout << "Cas tvoreni souboru: " << cas << " s" << "\n";
	}

#5 KIIV
Ten zápis trvá třeba hodinu, tak prostě mě zajímá kolik řádků se zapíše za sekundu. Tak mě zajímá co je jak náročné.

Ano, kod je asi sračka, učím se to 3ti týden, takže pro mě dobrý a zatím to dělá co má a dále se na tom učím. Namísto takového komentáře by jsi spíše mohl napsat co změnit, zlepšit, aby to nebyla taková hrůza. Až budu programovat pár let, tak jistě napíšu něco smysluplného.

Nahlásit jako SPAM
IP: 89.176.56.–
Jerry
~ Anonymní uživatel
512 příspěvků
4. 5. 2017   #7
-
0
-

#6 ORION206
sem tam něco vložil a mě to funguje, čas běhu 0.004 sec. tak nevim

#include "stdafx.h"
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
#include <string>
#include <sstream>
#include <time.h>
#include <ctime>

const int COLUMNS = 7;

struct radek
{
 float x;
 float y;
 float z;
 float odrazivost;
 float r;
 float g;
 float b;
};


using namespace std;

radek MakeRow(float pole[7])
{
 radek soucasnejRadek;
 soucasnejRadek.x = pole[0];
 soucasnejRadek.y = pole[1];
 soucasnejRadek.z = pole[2];
 soucasnejRadek.odrazivost = pole[3];
 soucasnejRadek.r = pole[4];
 soucasnejRadek.g = pole[5];
 soucasnejRadek.b = pole[6];

 return soucasnejRadek;
}

#define DatumFormat "%d.%m.%Y %H:%M:%S "
#define DatumVelikost 21
#define DatumFormat2 "%d.%m.%Y %H:%M:%S "
#define DatumVelikost2 21

static char *DATUM(char *buff)
{
 time_t t = time(0);
 strftime(buff, DatumVelikost, DatumFormat, localtime(&t));
 return buff;
}

float main()
{
 char volba;
 char format;
 char format2;

 float mez_X[2];
 float mez_Y[2];
 float mez_Z[2];

 int odrazivost[2];

 int barva_r[2];
 int barva_g[2];
 int barva_b[2];

 int pocetRadku;

 char date[DatumVelikost];
 //char date1[DatumVelikost2];

 int cas;

 cout << "Pokud chcete vysledny soubor dle souradnic stiknete S.\n";
 cout << "Pokud chcete vysledny soubor dle odrazivosti stiknete O.\n";
 cout << "Pokud chcete vysledny soubor dle barev stiknete R.\n";
 cout << "Pokud chcete vysledny soubor dle souradnic a odrazivosti vyberte variantu A.\n";
 cout << "Pokud chcete vysledny soubor dle souradnic a barev vyberte variantu B.\n";
 cout << "Pokud chcete vysledny soubor dle odrazivosti a barev vyberte variantu C.\n";
 cout << "Pokud chcete vysledny soubor dle souradnic, odrazivosti a barev vyberte variantu D.\n";

 cin >> volba;
 cin.get();


 // PODMINKA PRO SOURADNICE - S
 if (volba == 'S' || volba == 's')
 {
  std::string filename;
  std::string filenameOUT = "Vysledek_Cisla_Dle_Souradnic";
  cout << "Zadejte jmeno souboru, ze ktereho chcete nacitat data.\n";
  getline(cin, filename);
  cout << endl;
  cout << "Zadejte format nacitaneho souboru: \n";
  cout << "(1) - .pts\n";
  cout << "(2) - .txt\n";
  cout << "(3) - .rcp\n";
  cout << "(4) - .rcs\n";

  cin >> format;
  switch (format)
  {
  case '1':
   filename += ".pts";
   cout << "Byl vybran format .pts.\n";
   break;
  case '2':
   filename += ".txt";
   cout << "Byl vybran format .txt.\n";
   break;
  case '3':
   filename += ".rcp";
   cout << "Byl vybran format .rcp.\n";
   break;
  case '4':
   filename += ".rcs";
   cout << "Byl vybran format .rcs.\n";
   break;
  }
  cout << endl;
  cout << "Zadejte format vysledneho souboru: \n";
  cout << "(1) - .pts\n";
  cout << "(2) - .txt\n";
  cout << "(3) - .rcp\n";
  cout << "(4) - .rcs\n";

  cin >> format2;
  switch (format2)
  {
  case '1':
   filenameOUT += ".pts";
   cout << "Byl vybran format .pts.\n";
   break;
  case '2':
   filenameOUT += ".txt";
   cout << "Byl vybran format .txt.\n";
   break;
  case '3':
   filenameOUT += ".rcp";
   cout << "Byl vybran format .rcp.\n";
   break;
  case '4':
   filenameOUT += ".rcs";
   cout << "Byl vybran format .rcs.\n";
   break;
  }

  std::ifstream ifs(filename.c_str(), std::ifstream::in);
  std::ofstream ofs(filenameOUT.c_str(), std::ofstream::out);

  cout << endl;
  cout << "Zadejte souradnice pro vytvoreni souboru (x,y,z)\n";
  cout << "Zadejte mez X: (nejpreve zapornou a pak kladnou)\n";
  cin >> mez_X[0];
  cin >> mez_X[1];
  cout << "Zadejte mez Y:\n";
  cin >> mez_Y[0];
  cin >> mez_Y[1];
  cout << "Zadejte mez Z:\n";
  cin >> mez_Z[0];
  cin >> mez_Z[1];
  cout << "Meze zadany, nasleduje vytvareni souboru.\n";

  time_t start = time(NULL);


  //*********************************************
  clock_t time_begin = clock(); 
  //*********************************************


  int start1 = clock();

  int a = 0;

  if (ifs.is_open() && ofs.is_open())
  {
   std::string line;
   while (std::getline(ifs, line))
   {
    std::istringstream ss(line);
    radek soucasnejRadek;

    if (!(ss >> soucasnejRadek.x >> soucasnejRadek.y >> soucasnejRadek.z >> soucasnejRadek.odrazivost >> soucasnejRadek.r >> soucasnejRadek.g >> soucasnejRadek.b))
    {
     continue;
    }

    if (mez_X[0] <= soucasnejRadek.x && mez_X[1] >= soucasnejRadek.x)
    {
     if (mez_Y[0] <= soucasnejRadek.y && mez_Y[1] >= soucasnejRadek.y)
     {
      if (mez_Z[0] <= soucasnejRadek.z && mez_Z[1] >= soucasnejRadek.z)
      {
       a++;
       pocetRadku = a;
       ofs << soucasnejRadek.x << " " << soucasnejRadek.y << " " << soucasnejRadek.z << " " << soucasnejRadek.odrazivost << " " << soucasnejRadek.r << " " << soucasnejRadek.g << " " << soucasnejRadek.b << '\n';
      }

     }

    }


   }
   ifs.close();
   ofs.close();
  }
  else
  {
   std::cout << "Error opening file";
  }

  //LOG soubor souradnic
  time_t tt = time(0);
  struct tm*now = localtime(&tt);
  char DATUM_1[80];
  strftime(DATUM_1, DatumVelikost2, DatumFormat2, now);


  //*********************************************************
  clock_t time_end = clock();
  double elapsed_secs = double(time_end - time_begin) / CLOCKS_PER_SEC;
  std::cout << elapsed_secs; 
  //*********************************************************


  int stop = clock();
  cas = ((stop - start1) / (CLOCKS_PER_SEC));

  cout << "Vysledny soubor vytvoren.\n";
  cout << "Nasleduje zapis LOG souboru.\n";

  std::ofstream ofss("LOG_Cisla_Dle_Souradnic.txt", std::ofstream::out);

  ofss << "Informace o vyslednem souboru vytvoreneho dle mezi souradnic:\n";
  ofss << "Pouzite meze souradnic: \n" << "Mez X: " << "<" << mez_X[0] << "; " << mez_X[1] << ">\n" << "Mez Y: " << "<" << mez_Y[0] << "; " << mez_Y[1] << ">\n" << "Mez Z: " << "<" << mez_Z[0] << "; " << mez_Z[1] << ">\n";
  ofss << "Pocet bodu v tomto souboru: " << pocetRadku << "\n";
  ofss << "Zacatek vytvoreni souboru: " << DATUM(date) << "\n";
  ofss << "Konec vytvoreni souboru: " << DATUM_1 << "\n";
  ofss << "Cas tvoreni souboru: " << (double)(time(NULL) - start) << " s" << "\n";
  ofss << endl;

  cout << "LOG soubor byl vytvoren.\n";
  cout << "Cas tvoreni souboru: " << cas << " s" << "\n";
 }
}// main
Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:1564:...–
gna
~ Anonymní uživatel
1891 příspěvků
4. 5. 2017   #8
-
0
-

Když znáš time(), tak vyjeb ten clock(), který neměří uplynulý čas.

Jako ZAČÁTEK vypisuješ výsledek funkce DATUM(), která zjišťuje AKTUÁLNÍ čas a voláš ji na KONCI programu.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý