いつもお世話になってます。
前提・実現したいこと
現状のコードでの動作は
1をキーインすると、サブスレッドが生成され、点滅するようになっています。
0をキーインすると、サブスレッドが終了します。
これを、
2をキーインすると、線形で黒へ変わるように(例えば2秒で黒へ)したいです。(機能を追加)
そのためには、
0. 0がキーインされていても、サブスレッドが消されないようにする
(常時サブスレッドを動かしておく)
0. キーインイベントでサブスレッドに(キーごとに)何らかの引数を渡す
が必要と考えています(合っているか自信がないです)。
発生している問題・エラーメッセージ
先に挙げた2つのうち、1. については、
processing
1SubThread sub = null; 2void setup() { 3 // サブスレッドクラスを生成 4 sub = new SubThread(); 5 //Threadクラスを生成 6 Thread subThread = new Thread(sub); 7 //実行開始 8 subThread.start(); 9}
このように記述すれば良いと思っています。
2. についてが、どの様にすればよいのかわかりません。
processing
1while (running) { 2 try { 3 println("I am Sleeping..."); 4 // 点滅間隔|0.5[sec] 5 Thread.sleep(500); 6 } 7 catch( InterruptedException ex) { 8 ex.printStackTrace(); 9 } 10 11 if (toggle) { 12 G = 255; 13 println("Now G is 255"); 14 } else { 15 G = 0; 16 println("Now G is 0"); 17 } 18 toggle = !toggle; 19 }
この中に、キーインに応じて変数を渡して処理をさせればよいのかと考えていますが、
どの様に変更したらよいのかアイデアが出ません。
該当のソースコード
processing
1SubThread sub = null; 2 3float G = 255; 4 5void setup() { 6 frameRate(60); 7 size(500, 500, FX2D); 8 textSize(16); 9 textAlign(LEFT, TOP); 10} 11 12void draw() { 13 //background(200); 14 background(0, G, 0); 15 fill(0); 16 text("I am Main Thread.", 8, 0); 17 18 if ( sub != null && sub.running ) { 19 // サブスレッドが実行中 20 text("Sub Thread is Running.", 8, 20); 21 } else { 22 // サブスレッドは停止中 23 sub = null; 24 } 25} 26 27void keyPressed() { 28 if (key == '0') { 29 // サブスレッド実行中なら停止を依頼する 30 if ( sub != null && sub.running) { 31 sub.stopRunning(); 32 } 33 } else if (key == '1') { 34 // サブスレッド停止中なら生成する 35 if ( sub == null ) { 36 // サブスレッドクラスを生成 37 sub = new SubThread(); 38 //Threadクラスを生成 39 Thread subThread = new Thread(sub); 40 //実行開始 41 subThread.start(); 42 } 43 } 44} 45 46class SubThread implements Runnable { 47 // 実行許可FLG 48 private boolean running = true; 49 50 // ここが実行される 51 @Override 52 public void run() { 53 54 boolean toggle = true; 55 56 while (running) { 57 try { 58 println("I am Sleeping..."); 59 // 点滅間隔|0.5[sec] 60 Thread.sleep(500); 61 } 62 catch( InterruptedException ex) { 63 ex.printStackTrace(); 64 } 65 66 if (toggle) { 67 G = 255; 68 println("Now G is 255"); 69 } else { 70 G = 0; 71 println("Now G is 0"); 72 } 73 toggle = !toggle; 74 } 75 G = 255; 76 println("Sub Thread exit"); 77 } 78 79 public void gValue() { 80 } 81 public void stopRunning() { 82 running = false; 83 } 84} 85
試したこと
マルチスレッドについては
http://mslabo.sakura.ne.jp/WordPress/make/processing 逆引きリファレンス/マルチスレッドを実現するには/
を参考にしました。
補足情報(FW/ツールのバージョンなど)
processing3.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/11 10:56