« エンジンのバージョン番号 | メイン | 起動優先順位 »

2016年12月02日

吉里吉里Z 開発:: TickCount は timeGetTime/clock_gettime で

    

元々 Windows では timeGetTime で取得していたが、Android 版と共通化できないかと C++11 chrono で実装してみたが、乱数で偏りが大きくなるようなのでやめた。
乱数シードに TVPGetRoughTickCount32 等で得られる値を TVPPushEnvironNoise で追加しているが、chrono を用いて起動時からの経過秒数(ミリ秒)を返すように実装すると、TJS2 スクリプトで最初に乱数生成器を作っていると偏りが大きいように見えた。
乱数のシードに入れるものだけエポック秒にしてもいいが、共通化のために二種類準備するよりも単純に環境によって場合分けする実装にすることにした。
Windows は元の timeGetTime、Android は clock_gettime( CLOCK_MONOTONIC, &now ) とした。
Android のソースコードで SystemClock.uptimeMillis() の実装を見てみると、CLOCK_MONOTONIC が使われていたのでそれに準じた。同様の機能だと CLOCK_BOOTTIME かとも思えたが。
これで両方元の実装(システム起動時からの時間取得)と同じ機能となった。
吉里吉里起動時からの時間でもほとんどの場合困らないのだが。


投稿者 Takenori : 2016年12月02日 12:26




comments powered by Disqus
Total : Today : Yesterday : なかのひと