화면에 로딩 바를 표시하면서 한 기능에서 일부 데이터를 처리하는 방법을 실험하고 있습니다. 예를 들어, 컴퓨터에 약 5 초가 걸리는 프로세스 인 어레이에 많은 값을 추가합니다. 나는 다음과 같은 코드가 있습니다처리 3 - 함수에서 draw()를 호출해도 화면이 업데이트되지 않습니다.
ArrayList<String> strs = new ArrayList<String>();
String state;
float counter;
void setup() {
size(640, 480);
state = "load";
noStroke();
}
void draw() {
if (state.equals("load")) {
load();
} else if (state.equals("loading")) {
background(255);
fill(255, 0, 0);
rect(0, height/2-25, map(counter, 0, 10000000, 0, width), 50);
} else if (state.equals("play")) {
background(0, 255, 0);
}
}
void load() {
state = "loading";
for (int i = 0; i < 10000000; i++) {
strs.add(str(pow(i, 2)));
if (i % 1000 == 0) {
counter = i;
draw();
}
}
state = "play";
}
을하지만 난 그냥 녹색 화면을 얻을 때까지 약 5 초 동안 (즉, 배경 불려 가지 않은 (255)를 나타내는) 회색 화면을 얻을. 나는 물론, 같은과 코드를 대체 할 수있는 :
ArrayList<String> strs = new ArrayList<String>();
String state;
int counter;
void setup() {
size(640, 480);
state = "load";
noStroke();
counter = 0;
}
void draw() {
if (state.equals("load")) {
float theMillis = millis();
while (millis()-theMillis < 1000.0/frameRate && counter < 10000000) {
strs.add(str(pow(counter, 2)));
counter++;
}
if (counter >= 10000000) {
state = "play";
}
background(255);
fill(255, 0, 0);
rect(0, height/2-25, map(counter, 0, 10000000, 0, width), 50);
} else if (state.equals("play")) {
background(0, 255, 0);
}
}
그리고이 간단한 예를 들어 일 것입니다,하지만 난 명시 적으로에 따라 같은 함수를 호출 할 때 일) (그리려고 노력하고 있어요 load()의 복잡성 (실제로 프로젝트에서 작동하려고하는 것은 파일을 열고 압축 해제하고 JSONArrays 및 ArrayLists를 처리하는 250 개 이상의 행입니다.) draw 함수를 draw() 내부의 청크로 나눌 수 있습니다. 악몽 일세. 어쨌든 함수 내부에서 화면을 업데이트 할 수 있습니까? 모든 당신의 도움 :)이 draw()
기능이 완료 될 때까지
끝에'load()'와'loop()'의 시작 부분에'noLoop()'을 추가하려고 시도했는데 아무 것도 변경하지 않은 것 같았습니다. 그런 식으로'draw()'을 호출했을 때 이미 실행 중일 때 호출 할 수 있습니다. –
@VladimirShevyakov'noLoop()'과'loop()'를 호출하면'draw()'의 첫 번째 호출이 아직 완료되지 않았다는 사실은 바뀌지 않습니다. –
아. 글쎄 사실 실제로'thread() '를 사용하여 문제를 해결할 수있었습니다. –