よくわからないことを調べて解説してみるブログ。
2013
2013
■Windows APIより時刻取得について
いろいろ調べてみたが、現状の環境における分解能は1ミリ秒以下としか思えない。
ここ数年の情報がなく、Windows7、8の情報もない。
getLocalTimeの返却値は、ミリ秒単位で変化している。
分解能が15ミリであれば、15ミリ単位で変化すべきだが、それは確認できなかった。
私の環境下では、1ミリ秒単位で変化していた。
Windows APIの実装がどうなっているか分からない。調べ方が悪いのかもしれないし、ここから先はMicoSoftの有償サポートかもしれない。
■正確性の向上について
現在は、水晶振動子を用いたRTCはWindowsでは使われていなそうだ。NTPサーバを用いた時刻の定期更新がデフォルトで設定してあった(いわゆるデスクトップ画面の右下の時計から見れるサーバ)。
これはデフォルトでは、windowsが提供しているサーバである。しかもこれが調子悪そう。というかpingが届かない。
それに米国サーバのため、とても遠い。戻ってくる頃には数百ミリ秒はずれているだろう。
これを日本のNTP(http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/index.html)に変える。ほかにもいろいろある。
すると、ping値は数十ミリ秒に抑えられる。
2012
JVM.dllがクラッシュしまくった。
原因は実装コードが原因。
きっちりメソッドシグネチャとパラメータの型を合わせることでケアレスミスは解決する。
Double型 は、jobject
以下を例に注意点を。
これは、void PrintWriter#print(Double msg)というメッセージ出力メソッドを呼び出す流れ。
// クラス特定
原因は実装コードが原因。
きっちりメソッドシグネチャとパラメータの型を合わせることでケアレスミスは解決する。
Double型 は、jobject
以下を例に注意点を。
これは、void PrintWriter#print(Double msg)というメッセージ出力メソッドを呼び出す流れ。
// クラス特定
jclass printWriter = env->FindClass("Lprottype/print/sample/PrintWriter;"); // クラス探索の際は必ず「;」を忘れずにこれだけでjvmはこける。
// メソッド特定
jmethodID printD = env->GetStaticMethodID(printWriter,"print","(Ljava/lang/Double;)V"); // シグネチャの1パラメータごとに「;」をいれた方が無難。
// データ型取得。
jclass jDouble = env->FindClass("Ljava/lang/Double;"); // クラス探索
// コンストラクタ取得。
jmethodID jDoubleIns = env->GetMethodID(jDouble,"<init>","(D)V"); // プリミティブ型のdoubleはD、参照型のDoubleは、Ljava/lang/Double。オートボクシングは行われないので、必ず引数の型に合わせること。
jdouble value = 1.2424;
// Double生成。
jobject valueObj = env->NewObject(jDouble,jDoubleIns,value);
// メソッド呼び出し。
// メソッド呼び出し。
env->CallStaticVoidMethod(printWriter,printD,valueObj);
という感じです。
参照型はstringを除きjobjectで渡す。プリミティブ型を引数に取るものは、対応するj~の型を使う。
あとは、JNIのドキュメント見ればいける。
という感じです。
参照型はstringを除きjobjectで渡す。プリミティブ型を引数に取るものは、対応するj~の型を使う。
あとは、JNIのドキュメント見ればいける。
2012
2012
プロフィール
HN:
たんてーくん
性別:
非公開
最新記事
(03/29)
(03/29)
(06/26)
(05/21)
(04/23)
カテゴリー
最新CM
[09/25 http://2017.bblbuy.com]
[09/24 http://www.japanform.com]
[09/23 http://www.japanform.com]
[09/22 http://www.japanform.com]
[09/21 http://2017.bblbuy.com]
ブログ内検索