gpt4 book ai didi

java - 等待 ScheduledExecutorService 中的事件

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:54 25 4
gpt4 key购买 nike

我正在尝试使用 ScheduledExecutorService 来安排一系列事件,这些事件构成实验中的试验。每个事件在前一个事件完成后发生(例如,没有并发)。某些事件的时间由程序控制(并且似乎适合 ScheduleWithFixedDelay)。然而,其他事件的顺序部分地由用户输入确定,例如单击按钮。以下是伪代码中的事件概述:

present fixation cross
1 second delay
remove fixation cross
add stimulus
1 second delay
remove stimulus
for(question in questions){
presentQuestion(question);
wait until button click
clearQuestion(question);
1 second delay
}

我能够使用scheduleWithFixedDelay 实现for 循环之前的任务。我一直试图将其余的事件合并起来。这是我到目前为止所拥有的:

private void Schedule(){
executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
try {
if(trial > Ntrials){
stopSession();
executor.shutdown();
return;
}
addCross();
TimeUnit.MILLISECONDS.sleep(1000);
removeCross();
addStimulus();
TimeUnit.MILLISECONDS.sleep(1000);
removeStimulus();

}
catch (InterruptedException e) {
System.err.println("task interrupted");
}
System.out.println("Shutdown");
executor.shutdown();
};
executor.scheduleWithFixedDelay(task, 0, 1, TimeUnit.MILLISECONDS);

}

任何示例或建议将不胜感激。

最佳答案

由于您尝试运行的代码是连续的,因此您唯一应该使用 ScheduledExecutor因为是延迟。

这样想 - 调度程序允许您获取一段代码并在将来的某个时间运行它。

所以你真正想要的是:

present fixation cross
in 1 second:
remove fixation cross
add stimulus
in 1 second:
remove stimulus
...

等等。

实现in 1 second: ,您可以像这样使用调度程序:

executor.schedule(callable, 1, TimeUnit.SECONDS)

哪里callableCallable的一些实例返回结果(如果不返回任何内容,您也可以使用使用 Runnable 的其他变体)。

关于java - 等待 ScheduledExecutorService 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com