[openrtm-users 00756] Java版のPeriodicContextのバグについて
Yuki Suga
ysuga @ suou.waseda.jp
2009年 2月 25日 (水) 15:45:56 JST
OpenRTM-aistユーザの皆様:
早稲田の菅です.
お世話になっております.
Java版(ver. 0.4.1)のバグについてお知らせしたくメールを差し上げました.
該当箇所はjp.go.aist.rtm.RTC.executionContextパッケージの
PeriodicExecutionContextクラス内で,
int svc()というメソッドです.
旧コードでは,Thread.sleep(long, int)に対して,
Thread.sleep(0, (int)tv.getUsec()); (単位はマイクロ秒)
のような呼び出しが行われていますが,これは誤りで,
第1引数,第2引数に正しくは,
ミリ秒(long型),ナノ秒(int型)を入れます.
このせいで,正しい実行周期で実行できないばかりか,
periodic.rateに1.0などを入れると,
桁あふれを起こして実行すらできません.
旧コードと正しいコードを両方乗せます.
//////////////旧コード///////////////////
/**
* <p>ExecutionContext用のスレッドの実行関数です。
* 登録されたコンポーネントの処理を呼び出します。</p>
*/
public int svc() {
do {
TimeValue tv = new TimeValue(0, m_usec); // (s, us)
for(int intIdx=0;intIdx<m_comps.size();intIdx++ ) {
m_comps.elementAt(intIdx).invoke();
}
while( !m_running ) {
try {
Thread.sleep(0, (int)tv.getUsec());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if( !m_nowait ) {
try {
Thread.sleep(0, (int)tv.getUsec());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} while( m_running );
return 0;
}
////////////正しいコード////////////////
/**
* <p>ExecutionContext用のスレッドの実行関数です。
* 登録されたコンポーネントの処理を呼び出します。</p>
*/
public int svc() {
do {
TimeValue tv = new TimeValue(0, m_usec); // (s, us)
long millisec = m_usec / 1000;
int nanosec = (int)((m_usec % 1000) * 1000);
for(int intIdx=0;intIdx<m_comps.size();intIdx++ ) {
m_comps.elementAt(intIdx).invoke();
}
while( !m_running ) {
try {
Thread.sleep(millisec, nanosec);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if( !m_nowait ) {
try {
Thread.sleep(millisec, nanosec);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} while( m_running );
return 0;
}
以上です.
訂正されたJarファイルおよびインストーラが早急に公開されることを
希望します
ではでは.
--
//////////////////////////////////////////////////
Yuki Suga
Intelligent Machine Laboratory, Waseda Univ.
#59-325 3-4-1 Okubo Shinjuku-ku Tokyo, Japan
E-mail: ysuga @ suou.waseda.jp
URL: http://www.sugano.mech.waseda.ac.jp/~ysuga
URL: http://www.ysuga.net
//////////////////////////////////////////////////
openrtm-users メーリングリストの案内