如何在不杀死程序执行的情况下创建无限循环?

时间:2013-03-14 01:06:15

标签: javascript android

我有一个程序,其逻辑与我在此处包含的虚拟样本相同。我尝试过一个简单的while (1),它不会运行(至少UI没有显示)。此示例基于变量设置运行while循环,该变量设置由addEventListener()更改,应该终止循环。但是,它的行为与while (1)一样。简单地说,我需要做的是等待密码输入并验证它是否匹配。如果没有,我继续循环。如果匹配,则程序进入另一个循环(未在示例中显示),只要程序运行,该循环就需要运行。第二个while基于用户输入运行多个函数。每次有用户输入时,都会运行while的另一个循环。我不喜欢使用另一个线程。似乎任何创建循环的逻辑都以相同的方式作出反应,即没有执行或至少没有可见的执行。换句话说,为什么while (1)for (;;)不起作用!任何帮助将不胜感激。

//app.js
var debugText = Titanium.UI.createLabel({
    top: 600,
    left: 0,
    width: 500,
    height: 100,
    color: '#777',
    font:{fontSize:40},
    hintText: 'debug text'
});
var entryCodeText = Titanium.UI.createTextField({
    top: 300,
    left: 0,
    width: 400,
    height: 100,
    color: '#777',
    font:{fontSize:40},
    hintText: 'Enter Passcode'
});

//add labels and fields to window
    win.add(entryCodeText);
    win.add(debugText);
    win.open();

while (exitCode == 0) {
    // do stuff
} // end of exitCode while loop
// start of continuous program loop
while (1) {
    // if no event, just continue loop
    // if event , execute several functions and continue with loop
} // end of while(1) loop - runs as long as program runs
//*************************************************************************
entryCodeText.addEventListener("return", function(e) {

    if (computeCode(entryCodeText.value)< 0) {
        debugText.text = "failed computecode";
        exitCode = 0;
        continue;
    } else {
        debugText.text = "passed computeCode()";
        exitCode = 1;
        break;
    }
});
//continue with other logic on break and exitCode = 1
//************************************************************
function computeCode(textValue) {
    // do stuff to the textValue
}

2 个答案:

答案 0 :(得分:0)

while(true)

应该让它永远运行。

答案 1 :(得分:0)

使用keyup或keydown evt可能会更好。

那就是,如果你必须这样做,你可以使用setTimeout函数。

在脚本执行方面,它总是最后运行(即使在浏览器内部UI操作之后)也因此阻止了UI的锁定。

此示例使用2个文本框。一旦第一个具有正确的值,它就会进入内循环。

<html>
  <body>
  UserName: <input type="text" id="txt" /><br>
  Password: <input type="text" id="txt2" />


<script>
    var txt =  document.getElementById('txt'),
        txt2 = document.getElementById('txt2');
    var loop, innerLoop;
    (function loop(){
        setTimeout(function(){
            if(txt.value === 'name'){
            alert('correct username entered');
                            //new loop
                (function innerLoop(){ 
                    setTimeout(function(){
                        if(txt2.value === 'password') {
                            alert('correct password entered');
                            return;
                        }
                        else setTimeout(innerLoop,0); 
                    },0);
                })();
                return;
            }
            else setTimeout(loop,0);
        },0);
    })();
</script>

</body>
</html>

演示:http://jsfiddle.net/Vg5ND/