Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

denka avatar denka 52 Точки

Current time in miliseconds in C

Поразрових из google, но като цяло единственото смислено, което намерих е:

        struct timeb tmb;<br>         

        time_t t = tmb.millitm + tmb.time * 1000;

        sleep(10);

        time_t c = tmb.millitm + tmb.time * 1000;

        printf("a %lld\n", c);

        printf("b %lld", t);

Изхода обаче е:

a 4195985296
b 4195985296

Toест, до момента не намирам начин да работя с милисекунди в C.

Някой може ли да помогне?

 

Тагове:
0
Linux Курсове 31/01/2016 17:18:32
snaksa avatar snaksa 3 Точки

Ако искаш да засечеш времето между дадено събитие може да използваш clock(); Това ти връща текущото време. Засичаш го веднъж в началото, после в края и вадиш получените стойности.

EDIT: Извинявай, clock() ти връща времето от стартиране на програмата, а не текущия час.

#include<stdio.h>   
#include<time.h>

int main()
{
	clock_t start, end;

	start = clock();

	for (int i = 0; i < 10000000; i++)
	{
		int a = i;
	}

	end = clock();

	float diff = ((float)(end - start));
	printf("%f", diff);

	return 0;
}

 

0
31/01/2016 18:10:50
denka avatar denka 52 Точки

clock() връща броя тактове на процесора от началото на програмата до сега. Ако искам да вържа към секунди трябва да деля на CLOCKS_PER_SECOND.

1. Това забелязвам, че не работи много точно, тоест, ако ми каже, че са минали 10 секунди, реално са изминали 6(поне за моята машина). Видях и из гугъл, че наистина, ако гоним точно време не може да се разчита на това и препоръчват да се ползва time(NULL).

2. Първоначалния ми въпрос беше за милисекунди. Тоест ако искам да направя проверка - по - прецизна от секунда. (Примерно ми трябват точно 1.6 секунди).

 

0
snaksa avatar snaksa 3 Точки

Ясно, извинявай, не съм разбрал.

1
denka avatar denka 52 Точки

По - скоро аз трябваше да си обясня по - добре въпроса - ако бях написала това от втория коментар в първия .... 

Зарових се в тия неща покрай втора задача от домашното. Понеже в единия пример числото беше с плаващата запетая (1.8 seconds). И понеже в java за всякакви неща свързани с време ползвам функция, която връща милисекунди се замислих за еквивалент в С.

0
MartinKuvandzhiev avatar MartinKuvandzhiev 72 Точки
<span style="color:gray">#include</span><span style="color:black"> </span><span style="color:maroon"><sys/time.h></span><span style="color:black">

</span><span style="color:rgb(0, 0, 139)">struct</span><span style="color:black"> timeval  tv1</span><span style="color:black">,</span><span style="color:black"> tv2</span><span style="color:black">;</span><span style="color:black">
gettimeofday</span><span style="color:black">(&</span><span style="color:black">tv1</span><span style="color:black">,</span><span style="color:black"> NULL</span><span style="color:black">);</span><span style="color:black">
</span><span style="color:gray">/* stuff to do! */</span><span style="color:black">
gettimeofday</span><span style="color:black">(&</span><span style="color:black">tv2</span><span style="color:black">,</span><span style="color:black"> NULL</span><span style="color:black">);</span><span style="color:black">

printf </span><span style="color:black">(</span><span style="color:maroon">"Total time = %f seconds\n"</span><span style="color:black">,</span><span style="color:black">
         </span><span style="color:black">(</span><span style="color:rgb(0, 0, 139)">double</span><span style="color:black">)</span><span style="color:black"> </span><span style="color:black">(</span><span style="color:black">tv2</span><span style="color:black">.</span><span style="color:black">tv_usec </span><span style="color:black">-</span><span style="color:black"> tv1</span><span style="color:black">.</span><span style="color:black">tv_usec</span><span style="color:black">)</span><span style="color:black"> </span><span style="color:black">/</span><span style="color:black"> </span><span style="color:maroon">1000000</span><span style="color:black"> </span><span style="color:black">+</span><span style="color:black">
         </span><span style="color:black">(</span><span style="color:rgb(0, 0, 139)">double</span><span style="color:black">)</span><span style="color:black"> </span><span style="color:black">(</span><span style="color:black">tv2</span><span style="color:black">.</span><span style="color:black">tv_sec </span><span style="color:black">-</span><span style="color:black"> tv1</span><span style="color:black">.</span><span style="color:black">tv_sec</span><span style="color:black">));</span>

Това изписква в микросекунди

0
MartinKuvandzhiev avatar MartinKuvandzhiev 72 Точки
#include<sys/time.h>
struct timeval  tv1, tv2;
gettimeofday(&tv1, NULL);
/* stuff to do! */
gettimeofday(&tv2, NULL);
printf ("Total time = %f seconds\n",
         (double) (tv2.tv_usec - tv1.tv_usec) / 1000000 +
         (double) (tv2.tv_sec - tv1.tv_sec));
 

Това е за микросекунди

1
31/01/2016 20:01:15
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.