いつもお世話になっています。
前提・実現したいこと
(1を押したとき、)サブスレッド内で背景を永続的に0.5秒毎に黒と緑にしたい。
発生している問題・エラーメッセージ
実行時、緑→黒になった後、緑になってくれない。
コンソール部分にはI am Sleeping...と1秒毎に表示してくれているのですが...
該当のソースコード
processing
1SubThread sample = null; 2 3float G = 255; 4 5void setup() { 6 size(500, 500, FX2D); 7 textSize(16); 8 textAlign(LEFT, TOP); 9} 10 11void draw() { 12 //background(200); 13 background(0, G, 0); 14 fill(0); 15 text("I am Main Thread.", 8, 0); 16 17 if ( sample != null && sample.running ) { 18 // サブスレッドが実行中 19 text("Sub Thread is Running.", 8, 20); 20 } else { 21 // サブスレッドは停止中 22 sample = null; 23 } 24} 25 26void keyPressed() { 27 if ( key == '1') { 28 // サブスレッド停止中なら生成する 29 if ( sample == null ) { 30 // サブスレッドクラスを生成 31 sample = new SubThread(); 32 //Threadクラスを生成 33 Thread subThread = new Thread(sample); 34 //実行開始 35 subThread.start(); 36 } 37 } else if (key == '0') { 38 // サブスレッド実行中なら停止を依頼する 39 if ( sample != null && sample.running) { 40 sample.stopRunning(); 41 } 42 } 43} 44 45class SubThread implements Runnable { 46 // 実行許可FLG 47 private boolean running = true; 48 49 // ここが実行される 50 @Override 51 public void run() { 52 while (running) { 53 try { 54 //G = 255; 55 //G = 0; 56 println("I am Sleeping..."); 57 Thread.sleep(1000); 58 } 59 catch( InterruptedException ex) { 60 ex.printStackTrace(); 61 } 62 // 点滅間隔|0.5[sec] 63 if (frameCount / (frameRate * 0.5) % 2 ==0) { 64 G = 255; 65 } else { 66 G = 0; 67 } 68 } 69 70 println("Sub Thread exit"); 71 } 72 73 public void gValue() { 74 } 75 public void stopRunning() { 76 running = false; 77 } 78} 79
試したこと
マルチスレッドについては、
http://mslabo.sakura.ne.jp/WordPress/make/processing 逆引きリファレンス/マルチスレッドを実現するには/
を参考にしています。
補足情報(FW/ツールのバージョンなど)
processing3.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/09 08:46
2019/11/09 09:00
2019/11/09 09:07
2019/11/10 02:11
2019/11/10 07:10 編集
2019/11/10 07:22
2019/11/10 08:17
2019/11/10 08:27
2019/11/10 08:32
2019/11/11 01:02