- ベストアンサー
処理時間計測 Part2
http://oshiete1.goo.ne.jp/qa3620415.html で以前に質問したのですが、 #include <sys/timeb.h> struct _timeb tb; double gettimeofday_msec() { _ftime( &tb ); return ((double)tb.time * 1000.0) + ((double)tb.millitm); } ってVisual Studioでも使用可能なのでしょうか? よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
lovelaceさん 補足です。Situgyosyaさんと同じで、問題なくできました。僕の環境は、 - Microsoft Visual Studio .NET 2003 - Microsoft Development Environment 2003 Version 7.1.3091 - Microsoft Visual C++ .NET *****-***-********-***** です。サンプルコードと出力結果をおきますので参考にしてみてください。 ---------- sample.c ここから ---------- 01: #include<stdio.h> 02: #include<sys/timeb.h> 03: 04: struct _timeb tb; 05: 06: double gettimeofday_msec() { 07: _ftime( &tb ); 08: return( (double)(tb.time * 1000.0) + (double)tb.millitm ) ; 09: } 10: 11: void some_function() { 12: volatile int wait = 1000; 13: while(wait--) printf("%d\n",wait); 14: } 15: 16: main() { 17: double t1, t2, t3; 18: 19: t1 = gettimeofday_msec(); 20: some_function(); 21: t2 = gettimeofday_msec(); 22: t3 = t2-t1; 23: 24: printf( "%f - %f = %f\n", t2, t1, t3 ); 25: } ---------- sample.c ここまで ---------- ---------- stdout出力 ここから ---------- C:\>sample.exe 999 998 997 (中略) 2 1 0 1201237387541.000000 - 1201237387526.000000 = 15.000000 ---------- stdout出力 ここまで ---------- lovelaceさん wrote: > ってVisual Studioでも使用可能なのでしょうか? 実証できたので、結論として可能のようです。 どですか? ~~~~~ 蛇足ながら ~~~~~ 古い本ですので、現在も通用するかどうかわかりませんが、「MicrosoftC/C++ランタイムライブラリリファレンスVersion7」によると、_ftimeはANSIに準拠していないとあります。もしかしたら、Microsoft環境「でだけ」使用可能なのかもしれません。明言は避けます。 ちなみに、上記のコードは、RedhatLinux/Gcc3.4.6環境においてコンパイルエラーをはきます。_ftimeと_timebの先頭のアンダースコアを削除すると問題なくコンパイルでき結果もそれなりのものが得られました。 同じ質問を2度してるようですが、前の質問にも親切に回答してくださってる方がおられます。僕の返事もredfox63さんと同じです。たぶんだけど、そちらにまず返答やお礼などをするなりして、新しく質問してみたらいいんじゃないかなぁ。そんなことはちゃんとしてるよ!だったらごめんね。新参者なのに、意見してすいません(大汗)。ではでは(^^ Magna
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
補足の補足。 > _ftimeはANSIに準拠していないとあります。もしかしたら、Microsoft環境「でだけ」使用可能なのかもしれません。 「_ftime」はたぶんそうです(ひょっとしたらほかのWindows用のCコンパイラの ライブラリにあるかもしれません)。 それは、 Manpage of FTIME http://www.linux.or.jp/JM/html/LDP_man-pages/man3/ftime.3.html の説明を見るとわかりますが、もともとこの関数(ftime)は >4.2BSD, POSIX.1-2001. という環境/規格で決められたものです。 これはCの規格とは別物なので、ANSI(つか今は上のISOなんですけどね) にはないという表現がされているのでしょう。 また、ANSIにない関数ということで _ が前置されていると。 Red Hat+gccで _ 抜きの名前でコンパイルできるのは、GNU/LinuxのCライブラリは 基本的には上記のPOSIXというガイドラインにしたがっているからです。
- Situgyosya
- ベストアンサー率41% (21/51)
可能です。やってみればすぐわかることですが。