0
私は以下に示すスレッドクラスを持っています。これはm_bExit
がfalseに設定されて終了する必要があります。ブール値m_bMessageReceived
が外部に設定されています。スレッドクラスの変数が正しく設定されていません
public class CommsTimeout extends Thread {
public static boolean m_bMessageReceived = false;
public volatile boolean m_bExit = false;
private static long m_nStartTime;
public void run() {
while (!m_bExit) {
while ((System.currentTimeMillis() < (m_nStartTime + Constants.PERIOD))) {
// Wait...
}
if (!m_bMessageReceived) {
// Do stuff.
}
m_bMessageReceived = false;
}
}
public CommsTimeout() {
// Reset flags.
m_bMessageReceived = false;
m_bExit = false;
m_nStartTime = System.currentTimeMillis();
this.start();
}
}
CommsTimeout
クラスが別のクラスに初期化されている...
m_threadCommsTimeout = new CommsTimeout();
...とm_bMessageReceived
が別のクラスになるように設定されているすべての数ミリ秒:
CommsTimeout.m_bMessageReceived = true;
私の問題は、m_bMessageReceived
がタイムアウト期間内にtrue
に設定されていても、// Do stuff
行はs到達するまで。私は何を逃したのですか?ありがとう!
「Constants.PERIOD」とは何ですか? – SachinSarawgi
これは5000に等しいので、whileループは5秒間反復します。 – petehallw
m_bMessageReceivedをチェックした直後にfalseに設定していますので、whileの次の反復ではfalseになり、ループの反復がConstants.PERIODを超えない場合には "Do stuff"になります。 –