我需要检查在2秒内检测到多少事件。我有计时器工作,我有其他一切工作...但我遇到了一个问题:循环只检查一次,每秒,我似乎无法弄清楚如何解决这个问题。我需要它在这两秒钟内不断检查以查看总共有多少事件!
这就是我所拥有的:
int seconds = 0;
System.out.println("Seconds: " + seconds);
while(seconds < 2)
{
//Wait 1 second
try {
Thread.sleep(1000);
}
catch(Exception e) {}
seconds++;
System.out.println("Seconds: " + seconds);
//This needs to be looping the whole time.
//But right now, it's being blocked and only checked once
if(eventDetected() && seconds <= 2){
events++;
}
}
所以你可以看到我的问题。我无法拆分它们,因为第二个计时器会运行,然后检查eventDetected()。我需要它在两秒计时器之间不断检查...所以我基本上需要同时发生这两件事。我有什么方法可以做到这一点吗?
提前感谢您的帮助!
答案 0 :(得分:1)
我认为你的设计模式需要工作 - 我不知道你想要检测什么类型的事件,但无论你的睡眠时间有多短,你都有可能错过使用当前模式的事件。这是我的建议:
让eventDetected()
增加events
个计数器。这样,你就不会错过任何一个活动。
然后,您只需要一种方法来打开和关闭监听(并可能重置事件计数器)。如果您确定在当前模式中,您实际上处于不会阻止eventDetected()
方法的不同线程中,则可以设置要检查的标记。例如:
当你想开始听时:
listenForEvents = true;
在eventDetected()中:
if (listenForEvents) { events++; }
当您想要停止收听时(例如,在Thread.sleep()
通话后):
listenForEvents = false;
使用多线程时,请务必注意并发问题检查和设置变量。
答案 1 :(得分:0)
我会告诉你我要跟踪什么样的事件然后我必须杀了你:D
回答了我自己的问题。希望这会帮助其他人在某些方面遇到类似的问题!我查了一下多线程......
我创建了一个新类EventTimer,它实现了Runnable,公共字段为秒:
public class EventTimer implements Runnable{
int seconds;
static int timerThreadCount = 0;
Thread t;
public EventTimer() {
timerThreadCount++;
this.seconds = 0;
t = new Thread(this, "Event Timer");
t.start(); // Start the thread
}
@Override
public void run() {
// TODO Auto-generated method stub
while(seconds < 2)
{
//Wait 1 second
try {
Thread.sleep(1000);
}
catch(Exception e) {
System.out.println("Waiting interupted.");
}
seconds++;
System.out.println("Seconds: " + seconds);
}
}
}
然后我使用了EventTimer的一个实例,并使用了while循环&amp; if语句来解决我的问题。
EventTimer t = new EventTimer();
while(t.seconds < 2){
if(eventDetected()) events++;
}
实际上很简单!我意识到我的循环操作的每次迭代(因为上面的整个代码片段都在一个无限循环内)将创建一个新的EventTimer线程,但最终我会遇到内存问题。在计时器达到2秒后,我将如何关闭/结束一个线程?