私はWebで検索しましたが、それを実行する方法を見つけただけですが、この方法ではミリ秒ではなく秒単位で戻ります。
私のコードは:
#include <stdio.h>
#include <assert.h>
#include <time.h>
int main(void)
{
int solucion;
time_t start, stop;
clock_t ticks;
long count;
time(&start);
solucion = divisores_it(92000000, 2);
time(&stop);
printf("Finnished in %f seconds. \n", difftime(stop, start));
return 0;
}
クロスプラットフォームの方法は、ftimeを使用することです。
Windows固有のリンク: http://msdn.Microsoft.com/en-us/library/aa297926(v = vs.60).aspx
以下の例。
#include <stdio.h>
#include <sys\timeb.h>
int main()
{
struct timeb start, end;
int diff;
int i = 0;
ftime(&start);
while(i++ < 999) {
/* do something which takes some time */
printf(".");
}
ftime(&end);
diff = (int) (1000.0 * (end.time - start.time)
+ (end.millitm - start.millitm));
printf("\nOperation took %u milliseconds\n", diff);
return 0;
}
上記のコードを実行し、VS2008を使用してコードをトレースしたところ、実際にWindowsのGetSystemTimeAsFileTime関数を呼び出していることがわかりました。
とにかく、ftimeはミリ秒単位の精度を提供します。
以下の解決策は私には問題ないようです。どう思いますか?
#include <stdio.h>
#include <time.h>
long timediff(clock_t t1, clock_t t2) {
long elapsed;
elapsed = ((double)t2 - t1) / CLOCKS_PER_SEC * 1000;
return elapsed;
}
int main(void) {
clock_t t1, t2;
int i;
float x = 2.7182;
long elapsed;
t1 = clock();
for (i=0; i < 1000000; i++) {
x = x * 3.1415;
}
t2 = clock();
elapsed = timediff(t1, t2);
printf("elapsed: %ld ms\n", elapsed);
return 0;
}
リファレンス: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.15.html#clock
Windowsの場合、GetSystemTime()
が必要です。 POSIXの場合、gettimeofday()
。
GetSystemTime()
は、ミリ秒の分解能を提供する構造体SYSTEMTIME
を使用します。
この詳細はこちら 。
このコードは機能します。これはAngus Comberからの回答に基づいています:
#include <sys/timeb.h>
uint64_t system_current_time_millis()
{
#if defined(_WIN32) || defined(_WIN64)
struct _timeb timebuffer;
_ftime(&timebuffer);
return (uint64_t)(((timebuffer.time * 1000) + timebuffer.millitm));
#else
struct timeb timebuffer;
ftime(&timebuffer);
return (uint64_t)(((timebuffer.time * 1000) + timebuffer.millitm));
#endif
}