mirror of
https://github.com/processing/processing4.git
synced 2026-02-04 06:09:17 +01:00
added a new thread() example
This commit is contained in:
111
java/examples/Topics/Advanced Data/Threads/Threads.pde
Normal file
111
java/examples/Topics/Advanced Data/Threads/Threads.pde
Normal file
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* Thread function example
|
||||
* by Daniel Shiffman.
|
||||
*
|
||||
* This example demonstrates how to use thread() to spawn
|
||||
* a process that happens outside of the main animation thread.
|
||||
*
|
||||
* When thread() is called, the draw() loop will continue while
|
||||
* the code inside the function passed to thread() will operate
|
||||
* in the background.
|
||||
*
|
||||
* For more about threads, see: http://wiki.processing.org/w/Threading
|
||||
*/
|
||||
|
||||
// This sketch will load data from all of these URLs in a separate thread
|
||||
String[] urls = {
|
||||
"http://processing.org",
|
||||
"http://www.processing.org/exhibition/",
|
||||
"http://www.processing.org/reference/",
|
||||
"http://www.processing.org/reference/libraries",
|
||||
"http://www.processing.org/reference/tools",
|
||||
"http://www.processing.org/reference/environment",
|
||||
"http://www.processing.org/learning/",
|
||||
"http://www.processing.org/learning/basics/",
|
||||
"http://www.processing.org/learning/topics/",
|
||||
"http://www.processing.org/learning/gettingstarted/",
|
||||
"http://www.processing.org/download/",
|
||||
"http://www.processing.org/shop/",
|
||||
"http://www.processing.org/about/",
|
||||
"http://www.processing.org/about/people"
|
||||
};
|
||||
|
||||
// This will keep track of whether the thread is finished
|
||||
boolean finished = false;
|
||||
// And how far along
|
||||
float percent = 0;
|
||||
|
||||
// A variable to keep all the data loaded
|
||||
String allData;
|
||||
|
||||
void setup() {
|
||||
size(640, 360);
|
||||
smooth();
|
||||
// Spawn the thread!
|
||||
thread("loadData");
|
||||
}
|
||||
|
||||
void draw() {
|
||||
background(0);
|
||||
|
||||
// If we're not finished draw a "loading bar"
|
||||
// This is so that we can see the progress of the thread
|
||||
// This would not be necessary in a sketch where you wanted to load data in the background
|
||||
// and hide this from the user, allowing the draw() loop to simply continue
|
||||
if (!finished) {
|
||||
stroke(255);
|
||||
noFill();
|
||||
rect(width/2-150, height/2, 300, 10);
|
||||
fill(255);
|
||||
// The size of the rectangle is mapped to the percentage completed
|
||||
float w = map(percent, 0, 1, 0, 300);
|
||||
rect(width/2-150, height/2, w, 10);
|
||||
textSize(14);
|
||||
textAlign(CENTER);
|
||||
fill(255);
|
||||
text("Loading", width/2, height/2+30);
|
||||
}
|
||||
else {
|
||||
// The thread is complete!
|
||||
textAlign(CENTER);
|
||||
textSize(24);
|
||||
fill(255);
|
||||
text("Finished loading. Click the mouse to load again.", width/2, height/2);
|
||||
}
|
||||
}
|
||||
|
||||
void mousePressed() {
|
||||
thread("loadData");
|
||||
}
|
||||
|
||||
void loadData() {
|
||||
// The thread is not completed
|
||||
finished = false;
|
||||
// Reset the data to empty
|
||||
allData = "";
|
||||
|
||||
// Look at each URL
|
||||
// This example is doing some highly arbitrary things just to make it take longer
|
||||
// If you had a lot of data parsing you needed to do, this can all happen in the background
|
||||
for (int i = 0; i < urls.length; i++) {
|
||||
String[] lines = loadStrings(urls[i]);
|
||||
// Demonstrating some arbitrary text splitting, joining, and sorting to make the thread take longer
|
||||
String allTxt = join(lines, " ");
|
||||
String[] words = splitTokens(allTxt, "\t+\n <>=\\-!@#$%^&*(),.;:/?\"\'");
|
||||
for (int j = 0; j < words.length; j++) {
|
||||
words[j] = words[j].trim();
|
||||
words[j] = words[j].toLowerCase();
|
||||
}
|
||||
words = sort(words);
|
||||
allData += join(words, " ");
|
||||
percent = float(i)/urls.length;
|
||||
}
|
||||
|
||||
String[] words = split(allData," ");
|
||||
words = sort(words);
|
||||
allData = join(words, " ");
|
||||
|
||||
// The thread is completed!
|
||||
finished = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user