トップページ⇒tech
8コメント2KB

clock()の“49日目”問題

■ このスレッドは過去ログ倉庫に格納されています
0001minimaNGNG
clock()は(簡単に言っちゃえば)マシンを起動してからの経過時間(一般的には
1/1000秒単位)を返す関数ですが,49日間ほどマシンを連続して運用していると
clock()が 0 に戻ってしまうという話がありました。
それなりの対応をしていないアプリケーションは,49日以上連続で運用すると
問題が起きるかも〜とかね。

ってことで今 VC++5.0 の time.h を見てたんですが,clock_t は
unsigned long 型じゃなくてただの(っていうか signed の)long 型なんですね。
これでは25日もしないうちに clock() はマイナスの値を返すように
なっちゃわないでしょうか。
0002minimaNGNG
unsigned long now = (unsigned long)clock();
って感じで unsigned にキャストして,25日問題はクリアですか。

っていうか,普通は25日間も連続で使いませんよねー。
もうsageようかな。
0003>1NGNG
前回からの時間差を知りたいだけなら参照した時の値をold@`今回をnewとして
常に new-old;old=new; を実行すればいいと思いますが?
1時間以上差をとらないようなシステムなら time()を使えばいいのでは?
0004名無しさん@お腹いっぱい。NGNG
日付のカウンタを別に用意すりゃいいじゃん
バカ?
0005>4NGNG
バカとアホは煽り言葉なので配慮しましょうね

で、1さんはclockの他にtimeも使える事に注目して下さい。
timeが60*60*24秒 以上ならtimeを使えば普通問題無いでしょう
どうせパソコンの時計の精度は1日1秒程度しかありません。
00065NGNG
あ、timeの差がという事ね。
それと1さんは、49日を過ぎるとclockが正常に使えなくなるような気がしていませんか?
ラップアラウンドするので、普通に差を取ればその差が
符号付で24日以内@`符号無しで49日以内なら問題ありません。

単純にclockの帰り値と同じ型で差を取るという事がコツかもしれません。
0007名無しさん@お腹いっぱい。NGNG
clockなんて、ゲームでのキーボードや画面表示割り込みとか
乱数の種くらいにしかつかわないでしょ?
通信制御とかにも使うのかな?
0008>7NGNG
clockは汎用なので使うようになって来てるかも
■ このスレッドは過去ログ倉庫に格納されています