空循环while循环永远不会退出Processing

时间:2018-01-26 20:25:29

标签: loops while-loop processing webcam

我试图从网络摄像头抓住两个连续的帧,我尝试按照以下方式进行操作。

import processing.video.*;

Capture video;
PImage image1, image2; //Images à comparer
int videoVar = 1;

void setup() {
  size(800, 600);
  video = new Capture(this, Capture.list()[61]);
  video.start();
}

void draw() {
    image1 = video.get();
    int m = videoVar;
    while (m == videoVar) {
      //println(m);
    }
    image2 = video.get();
    //image(image1, 0, 0);
    //image(image2, width/2, 0);
}

void captureEvent(Capture video) {
  video.read();
  videoVar = videoVar*(-1);
}

问题在于,while循环本来应该充当自定义延迟,从不会自行退出。它只会在while循环中出现一些内容,作为" print(' m');"例如。问题是,打印需要时间,我希望我的程序尽可能快。

有人会对发生的事情提出建议吗?

1 个答案:

答案 0 :(得分:0)

你所说的并没有多大意义。我希望while循环不断循环,不管它里面是什么。

你根本不应该使用循环作为延迟。您可以使用delay()函数。

但更好的是,您应该使用millis()函数或frameCount变量来检查是否已经过了一定的时间。或者,您只需设置从boolean函数设置的captureEvent()值。

如果您仍然无法弄明白,请详细说明您在此尝试做的事情。

修改:为了好玩,您可以尝试在volatile声明前添加关键字videoVar吗?该行如下所示:volatile int videoVar = 1;然后尝试while循环,不包含任何内容。

但除此之外,我建议您将代码更改为:

boolean doThing = false;

void setup() {
  size(800, 600);
}

void draw() {
  if(doThing){
    // do the thing
    doThing = false;
  }
}

void captureEvent(Capture video) {
  doThing = true;
}

这仅仅是一个例子,但希望它能够证明这种方法。或者,您可以使用noLoop()loop()函数:

void setup() {
  size(800, 600);
}

void draw() {
  // do the thing
  noLoop();
}

void captureEvent(Capture video) {
  loop();
}