在javascript

时间:2015-12-15 16:00:43

标签: javascript

我创建了一个小型通用4级流水线,它模拟了所提供的时钟周期。但是我想暂停它并在中间恢复它并且我无法做到这一点。这是我的FIDDLE,暂停时我想添加一个标志。

if flag == 1 //keep simulating
if flag == 0 // pause simulation where it is
if flag == 0 and click resume resume simulation until its end

var flag = 1; //initial value
function pause(){
 flag = 0;
}
function resume(){
 flag = 1;
}
//i try to check if flag is 0 then alert pause or something but no luck

function startSim(){
  document.getElementById('clockDiv').innerHTML = 'Clock Period '+clockPeriod;
  if(index == 22){
    clearInterval(sim);
  }else if(flag == 0){
      alert("Simulation Paused");
  }else{
  clockPeriod++;
    fetch();
    decode();
    execute();
    store();
  index++;
 }
}

我很感激如何做到这一点。

5 个答案:

答案 0 :(得分:1)

您应该更改Fiddler中的JavaScript设置:将“加载类型”设置为无包装,您的代码将起作用。

虽然我建议使用clearTimeout而不是标志。

答案 1 :(得分:1)

问题不是你的代码,而是jsfiddle中加载javascript的默认方式是如何工作的(nl,onload,所以是一个匿名函数)

因此,当您单击按钮时,您的功能暂停/恢复将不再可用。

要更改此设置,您可以更改页面中加载javascript的方式,最简单的方法是:

enter image description here

此时您的代码将部分工作(警报非常烦人,因为它会在每个时间间隔弹出),并且您的重置无法正常工作,因为var sim是在本地定义的(如@razzak中提到的那样)另一个答案)

答案 2 :(得分:1)

我认为这不仅仅是一个小问题,请看这个:

function start(){
var sim = setInterval(function(){startSim()},500);
}

....
if(index == 22){
  clearInterval(sim);
}else if(flag == 0){
  alert("Simulation Paused");
....

你在函数的本地范围内创建了sim,然后在另一个函数中使用它...这实际上是一个错误。

使用它:

function start(){
    return setInterval(function(){startSim()},500);
}

FIDDLE

答案 3 :(得分:0)

如果用户单击暂停,则设置标志并在startSim回调中处理它。如果您flag == 0尝试模拟暂停,但您的索引计数器在11秒时变为22。在点击暂停之前,它会非常快速地显示出来。

答案 4 :(得分:0)

这是我的去处:http://jsfiddle.net/j82j14r6/2/

而不是setInterval,我正在使用setTimeout并自行调用函数:

function tick()
{
   if(!paused)
   {
         // Do stuff
       document.querySelector('#log').value = ticks;
       ticks++;
   }

   setTimeout(tick, 500);
}

这样可以轻松控制滴答,暂停,结束等。

请注意,使用setTimeoutsetInterval并不是计算时间和/或制作此类循环的最准确方法,但如果您的项目不太重要 - 这是一个正常的这样做的方法。

至于为什么你的按钮没有调用相应的功能......这主要是一个jsfiddle问题。我在JS部分用addEventListener修复此问题,而不是在HTML按钮本身上使用onclick

<input type = "button" value = "togglepause" id = "pausebutton"/><br/>

document.querySelector('#pausebutton').addEventListener('click', togglepause);