空 while 循环永远不会在处理中退出
Empty while loop never exits in Processing
我正在尝试从网络摄像头捕捉两个连续的帧,我尝试按以下方式进行。
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');"。问题是,打印需要时间,我希望我的程序尽可能快。
任何人都可以对正在发生的事情提出建议吗?
我希望 while
循环能够不断地自我循环,而不管它里面有什么。
你根本不应该使用循环作为延迟。您可以使用 delay()
函数。
但更好的是,您应该使用 millis()
函数或 frameCount
变量来检查是否已经过了一定的时间。或者你应该只设置一个你从 captureEvent()
函数设置的 boolean
值。
如果您仍然无法弄明白,请更具体地说明您在此处尝试执行的操作。
编辑: 只是为了好玩,你可以尝试在 videoVar
的声明前面添加关键字 volatile
吗?该行看起来像这样: 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();
}
我正在尝试从网络摄像头捕捉两个连续的帧,我尝试按以下方式进行。
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');"。问题是,打印需要时间,我希望我的程序尽可能快。
任何人都可以对正在发生的事情提出建议吗?
我希望 while
循环能够不断地自我循环,而不管它里面有什么。
你根本不应该使用循环作为延迟。您可以使用 delay()
函数。
但更好的是,您应该使用 millis()
函数或 frameCount
变量来检查是否已经过了一定的时间。或者你应该只设置一个你从 captureEvent()
函数设置的 boolean
值。
如果您仍然无法弄明白,请更具体地说明您在此处尝试执行的操作。
编辑: 只是为了好玩,你可以尝试在 videoVar
的声明前面添加关键字 volatile
吗?该行看起来像这样: 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();
}