- PR -

スレッドの作成と実行

投稿者投稿内容
しろ
会議室デビュー日: 2004/02/02
投稿数: 12
お住まい・勤務地: 都内
投稿日時: 2004-02-02 15:06
始めまして、初めて投稿させて頂きます。

現在地震波形のアニメーションプログラムを作成しているのですが、
スレッドを使用して2Dアニメーションを行うプログラムの部分で
複数(私の場合は674個)のスレッドを同時に実行したいのですが
どのような方法を取っていいかわからずここに投稿させて頂きました。

Java自体が初心者な為、醜いソースですが、過去にアニメーションを
作成した事がある方で心あたりがおられた方は助言して頂ければと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-02 15:10
何がわからないのでしょうか?

・スレッドの API の使い方
・674 個ものスレッドを問題なく生成する方法
・スレッド内からアニメーションする方法・・?
などあると思いますが。
しろ
会議室デビュー日: 2004/02/02
投稿数: 12
お住まい・勤務地: 都内
投稿日時: 2004-02-02 15:14
インギさん返答ありがとうございます。
説明不足で申し訳ありませんでした。

スレッドにはそれぞれY座標として座標の点が1〜674の値を実行させるようにしたいと
思っています。アプレット上での実行になるので、座標の値とスレッドに渡す値をどのように渡せばいいのかが分からなくて投稿しました。

参考URL
http://shiro-ik.homeip.net/web/study/Research/Earthquake/index.html

ご指導よろしくお願いいたします。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-02-02 16:42
こんにちは、Wataです。
ソースをチラッとだけ見てみましたが、スレッドのコンストラクタにthis(アプレットインスタンス)を渡しているようですね。したがって、スレッドはたくさんあるけど、run()を実行するのは一人だけ...という状態ですね。
解決策としては、まずRunnableインターフェースの実装クラスをアプレットと別にします。
そして、そのインスタンスに描画対象のy座標をフィールドに保持させて、各スレッドごとにインスタンスを作成するのがよいと思います。

といったものの、
引用:

アニメーションの流れとしては、一つのY座標に対して一つのスレッドをしようして、Y座標の数だけスレッドを 作成して同時に実行させるといった手法を用いる。
つまりスレッドは674個必要となる。


とのことですが、for文で674回ループさせるのでは駄目なのですか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-02-02 16:59
Appletということは様々な性能を持つクライアントPC上での実行を想定するわけで、
674本も子スレッドをSpawnするというのは辛い気がしますがいかがでしょうか?
そちらの方面に突き進む前に、設計を見直されたほうが宜しいのでは?
しろ
会議室デビュー日: 2004/02/02
投稿数: 12
お住まい・勤務地: 都内
投稿日時: 2004-02-02 17:05
Wataさん返答ありがとうございます。

引用:
--------------------------------------------------------------------------------
解決策としては、まずRunnableインターフェースの実装クラスをアプレットと別にします。
そして、そのインスタンスに描画対象のy座標をフィールドに保持させて、各スレッドごとにインスタンスを作成するのがよいと思います。
--------------------------------------------------------------------------------

なるほど・・・

引用:
--------------------------------------------------------------------------------

とのことですが、for文で674回ループさせるのでは駄目なのですか?
--------------------------------------------------------------------------------

for 文で674回ループさせるとした場合には、
アニメーションは0.1秒ずつで200回表示されます。
その200回の中でY座標の一つの座標がもつX座標の全てのピクセルに色を付けて
それを0.1秒の間に674回くりかえして、200回行うということが現実に処理可能
かどうか思案の末にスレッドにたどり着いたのですが、
どうでしょうか?

言葉足らずで申し訳ありませんがご教授お願いします。
しろ
会議室デビュー日: 2004/02/02
投稿数: 12
お住まい・勤務地: 都内
投稿日時: 2004-02-02 17:08
おばけさん返答ありがとうございます。

引用:

Appletということは様々な性能を持つクライアントPC上での実行を想定するわけで、
674本も子スレッドをSpawnするというのは辛い気がしますがいかがでしょうか?
そちらの方面に突き進む前に、設計を見直されたほうが宜しいのでは?



たしかにそれは考えたのですが、他に方法が浮かばなかったもので、
なにか良い知恵はございますでしょうか?

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-02 17:56
CPU が複数あるのであればスレッドで処理を分ければ処理速度が向上する可能性があります。
しかし、Applet を実行する環境は多くの場合マルチ CPU ではありませんので処理速度の向上はのぞめないと思います。(ファイルI/O 待ちなどが発生する処理なら話は別です)
674 個もスレッドを生成したらコンテクストスイッチの負荷が大きくとても処理速度が低下してしまうと思いますよ。

>for 文で674回ループさせるとした場合には、
>アニメーションは0.1秒ずつで200回表示されます。
>その200回の中でY座標の一つの座標がもつX座標の全てのピクセルに色を付けて
>それを0.1秒の間に674回くりかえして、200回行うということが現実に処理可能
>かどうか思案の末にスレッドにたどり着いたのですが、
これちょっと意味分かりませんでした。for文で間に合わない処理ならスレッドに分けるともっと遅くなりますのでやはり間に合いません。

スキルアップ/キャリアアップ(JOB@IT)